[静态服务器]用node写一个静态服务器

104 阅读1分钟

前言

使用node写一个简单的静态服务器,本项目主要使用了TypeScript

实现过程

HTTP请求和响应主要分为两个部分,头和体,通过请求头我们能得到用户传来了什么请求,又请求什么

可以看到用户发了一个GET请求,请求了/路径

因此我们只需要对不同的请求类型和请求地址响应不同的内容即可

首先我们创建一个服务器

const server = http.createServer();

监听一个端口,这里我使用了8888端口

server.listen(8888);

然后开始监听用户的请求

server.on('request', (request, response) => {});

在这里我们拿到了用户发来的request,分别拿到用户的请求类型method和请求路径path

server.on('request', (request, response) => {
  const {method, url: path} = request;
});

由于是静态服务器,因此我们只接受GET类型的请求

  if (method !== 'GET') {
    response.statusCode = 405;
    response.end();
    return;
  }

然后就是对请求路径的分析,是非常简单的if...else...逻辑

const {pathname} = url.parse(path as string);

const filename = pathname?.substring(1) || 'index.html';
fs.readFile(p.resolve(publicDir, filename as string), (err, data) => {
  if (err) {
    if (err.errno === -4058) {
      response.statusCode = 404;
      fs.readFile(p.resolve(publicDir, '404.html'), (err, data) => {
        response.end(data);
      });
    } else if (err.errno === -4068) {
      response.statusCode = 403;
      response.end('Forbidden');
    } else {
      response.statusCode = 500;
      response.write('Unknown Error');
      response.write('Please Retry Later');
      response.end();
    }
  } else {
    response.setHeader('Cache-Control', `public, max-age=${cacheAge}`);
    response.end(data);
  }
});

至此一个简单的静态服务器就完成了,如果你有好的想法,欢迎留言告诉我~