用node写一个静态服务器

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

前言

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

实现过程

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

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

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

首先我们创建一个服务器

1
const server = http.createServer();

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

1
server.listen(8888);

然后开始监听用户的请求

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

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

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

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

1
2
3
4
5
if (method !== 'GET') {
response.statusCode = 405;
response.end();
return;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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);
}
});

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


用node写一个静态服务器
https://bald3r.wang/2022/08/08/41-静态服务器-用node写一个静态服务器/
作者
Allen
发布于
2022年8月8日
许可协议