[静态服务器]用node写一个静态服务器
前言
使用node写一个简单的静态服务器,本项目主要使用了TypeScript
实现过程
HTTP请求和响应主要分为两个部分,头和体,通过请求头我们能得到用户传来了什么请求,又请求什么
可以看到用户发了一个GET请求,请求了/路径

因此我们只需要对不同的请求类型和请求地址响应不同的内容即可
首先我们创建一个服务器
| 1
 | const server = http.createServer();
 | 
监听一个端口,这里我使用了8888端口
然后开始监听用户的请求
| 1
 | server.on('request', (request, response) => {});
 | 
在这里我们拿到了用户发来的request,分别拿到用户的请求类型method和请求路径path
| 12
 3
 
 | server.on('request', (request, response) => {const {method, url: path} = request;
 });
 
 | 
由于是静态服务器,因此我们只接受GET类型的请求
| 12
 3
 4
 5
 
 | if (method !== 'GET') {response.statusCode = 405;
 response.end();
 return;
 }
 
 | 
然后就是对请求路径的分析,是非常简单的if...else...逻辑
| 12
 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);
 }
 });
 
 | 
至此一个简单的静态服务器就完成了,如果你有好的想法,欢迎留言告诉我~