JS之搭建服务器

本次搭建服务器是基于node.js,所以请安装nodejs。

要使用 HTTP 服务器与客户端,需要 require('http')

搭建最简单的服务器

新建一个server.js文件

var http = require("http");
console.log("http");

var server = http.createServer(request,response){
    response.setHeader("Content-Type","text/html; charset=utf-8");
    response.write("

Hello World

"); response.end(); } server.linste(9000);

这样就是一个最简单的服务器了。

运行方法:打开终端,切换到server.js所在目,执行node server.js,然后打开浏览器,在地址栏中输入localhost:9000

console.log("http")的结果会在终端显示。

搭建能正常访问网页的服务器

在上面最简单的服务器的基础上搭建一个能正常访问网页的服务器

原理是根据地址栏里的访问地址,找到对应的文件,读取后显示在浏览器中。

需要用到nodejs的fs模块,path模块,url模块。

  • fs模块:文件系统
  • path模块:提供了一些工具函数,用于处理文件与目录的路径
  • url模块:提供了一些实用函数,用于 URL 处理与解析
var http = require("http");
var path = require("path");
var fs = require("fs");
var url = require("url");

var server = http.createServer(function(req,res){
    staticRoot(req,res);
});

server.listen(9090);

function staticRoot(req,res){
    var pathObj = url.parse(req.url,true);

    var filePath = path.join(__dirname,pathObj.pathname);

    if(fs.existsSync(filePath)){
        var pathnameDir = fs.lstatSync(filePath);
        if(pathnameDir.isDirectory()){
            filePath = path.join(filePath,"index.html");
        }
    }

    fs.readFile(filePath,"binary",function(error,fileContent){
        if(error){
            res.writeHead(404,"not found");
            res.write("

404 Not Found

"); res.end(); }else{ res.writeHead(200,"OK"); res.write(fileContent,"binary"); res.end(); } }); }

使用url.parse()解析请求的url地址(即地址栏中的地址),返回一个对象:

Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '',
  query: {},
  pathname: '/',
  path: '/',
  href: '/' }

这样就可以把参数和对应的文件夹区分开了,参数保存在query里,也是个对象。

使用path.join()把server.js所在路径跟要访问的文件(例如a.html)连接在一起,组成要访问的文件(例如a.html)路径,这样可以确保fs方法可以通过路径读取文件。

使用fs.readFile()读取文件,写入响应体,就可以通过浏览器访问了。

增加路由功能

什么是路由呢?

可以简单的理解一下,localhost:9090/example,localhost:9090后面的就算路由了。

var http = require("http");
var path = require("path");
var fs = require("fs");
var url = require("url");

var server = http.createServer(function(req,res){
    routePath(req,res);
});

server.listen(9090);

function routePath(req,res){
    var pathObj = url.parse(req.url,true);

    switch(pathObj.pathname){
        case "/getWeather":
        var ret;
        if(pathObj.query.city == "beijing"){
            ret = {
                "city": "beijing",
                "weather": "sunny"
            }
        }else{
            ret = {
                "city": pathObj.query.city,
                "weather": "Unknow"
            }
        }
        res.end(JSON.stringify(ret));
        break;
        default:
        staticRoot(req,res);
    }

}

function staticRoot(req,res){
    var pathObj = url.parse(req.url,true);

    var filePath = path.join(__dirname,pathObj.pathname);

    if(fs.existsSync(filePath)){
        var pathnameDir = fs.lstatSync(filePath);
        if(pathnameDir.isDirectory()){
            filePath = path.join(filePath,"index.html");
        }
    }

    fs.readFile(filePath,"binary",function(error,fileContent){
        if(error){
            res.writeHead(404,"not found");
            res.write("

404 Not Found

"); res.end(); }else{ res.writeHead(200,"OK"); res.write(fileContent,"binary"); res.end(); } }); }

使用switch语句,localhost后面不同的后缀实现不同的功能,这是简单的路由。

你可能感兴趣的:(JS之搭建服务器)