[静态服务器]用node写一个静态服务器
前言
使用node写一个简单的静态服务器,本项目主要使用了TypeScript
实现过程
HTTP请求和响应主要分为两个部分,头和体,通过请求头我们能得到用户传来了什么请求,又请求什么
可以看到用户发了一个GET
请求,请求了/
路径
![](https://img.bald3r.wang/img/20220807180603.png)
因此我们只需要对不同的请求类型和请求地址响应不同的内容即可
首先我们创建一个服务器
1
| const server = http.createServer();
|
监听一个端口,这里我使用了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); } });
|
至此一个简单的静态服务器就完成了,如果你有好的想法,欢迎留言告诉我~