前言
使用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);
}
});
至此一个简单的静态服务器就完成了,如果你有好的想法,欢迎留言告诉我~