从头编写一个 HTTP 静态资源服务器

首先需要的Node 模块有 http,url,path,fs 模块。

```

// 提供一个http 服务

var http = require('http');

// 用于处理 url 字符串和 url对象

var url = require('url');

// 用于处理文件路径

var path = require('path');

// fs 模块  用于读取文件的

var fs = require('fs');

```

然后要用 http模块来创建一个http模块。

```

http.createServer(function(request,response){

  //

})

```

当一个http 请求过来的时候,需要解析request.url 字段,利用url.parse()将request.url 字符串转义成url 对象。

```

var pathName = url.parse(request.url).pathname;

```

这里假设的是把js文件所在的目录作为静态服务器的地址。

```

var realName = path.join('.', pathName);

```

然获取到请求资源的文件类型

```

var ext = path.extname(pathName);

ext = ext ? ext.slice(1) : 'unknown';

```

然后判断文件是否存在,如果存在,则返回文件,否者返回404

```

// 判断文件是否存在。

fs.exists(realName, function (exists) {

})

```

如果不存在

```

if (!exists) {

  response.writeHead(404, {'Context-type' : 'text/plain'});

  response.write('this request url' + pathName + ' was not found on this server.');

  response.end();

}

```

如果文件存在,则读取文件的二进制流

```

var requestType = {

    "css" : "text/css",

    "js" : "text/javascript",

    "html":"text/html"

};

fs.readFile(realName, 'binary', function (err, file) {

    if (err) {

        response.writeHead(500, {'Context-type' : 'text/plain'});

      response.end(err);

    }

    else {

          var contentType = requestType[ext] || "text/plain";

          response.writeHead(200, {'Context-type' : contentType});

          response.write(file, 'binary');

          response.end();

    }

});

```

这样,一个简单的HTTP 静态资源服务器就写好了。

贴上项目地址:https://github.com/bosscheng/simple-http-server

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容