纯手写node静态服务器
2022-05-19 本文已影响0人
姜治宇
客户端跟服务端的通信都是通过socket进行的。
客户端跟服务端各开一个socket,客户端通过三次握手协议跟服务端的socket取得联系后,将准备发送的资源进行报文封装(request请求头)放在socket上,然后服务端从socket获取数据进行处理;
同理,当服务端处理完毕后,也是将数据进行报文封装(response响应头)放在socket上,客户端会从服务端的socket获取数据,然后进行相关的解析。
node提供的http包,其实就是对服务端的socket进行了封装,利用它可以很容易的实现一个静态服务器。
const fs = require('fs');
const path = require('path');
const url = require('url');
const http = require('http');
const mime = require('mime');//npm安装
let server = http.createServer((req, res) => {
let dir = path.join('D:', 'test', 'public');//资源的存放目录
let urlObj = url.parse(req.url);
let pathname = urlObj.pathname;
let ext = path.extname(req.url);
res.writeHeader(200, { 'Content-Type': mime.getType(ext) });
try { //Sync函数需要捕获异常
let filepath = path.join(dir, pathname);
if (fs.existsSync(filepath)) {
res.write(fs.readFileSync(filepath));
} else {
res.write('file not found');
}
} catch (err) {
res.write('system error');
}
res.end();
});
server.listen(8888);