写一个微型node服务器

代码

https://github.com/Dunteng/node.js/tree/master/net%E5%BE%AE%E5%9E%8B%E6%9C%8D%E5%8A%A1%E5%99%A8



基础demo

我们可以使用浏览器来对Server建立连接并发送请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//server.js

var net = require("net");

var server = net.createServer();
server.listen(12306, "127.0.0.1");

server.on("listening", function () {
console.log("服务已启动");
});

server.on("connection", function (socket) {
console.log("有新的连接");
socket.on("data", function (data) {
console.log(data.toString());
});
});


开启server服务,然后在浏览器访问127.0.0.0:12306,可以看到打印出了data,而这个data就是请求头👇

1571650335272


模拟获取请求头数据和设置响应头👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var net = require("net");

var server = net.createServer();
server.listen(12306, "127.0.0.1");

server.on("listening", function () {
console.log("服务已启动");
});

server.on("connection", function (socket) {
console.log("有新的连接");
socket.on("data", function (data) {
console.log(data.toString());
var request = data.toString().split("\r\n");
var url = request[0].split(" ")[1];
console.log(url);
socket.write("HTTP 200OK\r\nContent-type:text/html\r\nServer:DWS/1.1\r\n\r\n<html><body>hello browser</body></html>");
});
});


1571651223434


1571651233360


💡到了这一步,我们可以进一步实现平时看到的网站响应的效果:

​ 新建一个index.html文件,我们通过浏览器访问http://127.0.0.1:12306/index,然后服务端解析请求头截取到index字段,通过这个字段知道服务端要响应出index.html的数据。怎么获取到目标文件的内容,这就涉及到了读写文件的操作了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var net = require("net");
var fs = require("fs");

var server = net.createServer();
server.listen(12306, "127.0.0.1");

server.on('listening', function () {
console.log('服务启动了');
})

server.on('connection', function (socket) {
console.log('有新的连接建立了');

socket.on('data', function (data) {
console.log(data.toString());
var request = data.toString().split('\r\n');
var url = request[0].split(" ")[1];
console.log(url);
try {
var dataFile = fs.readFileSync(__dirname + url);
// console.log(dataFile.toString());
socket.write("HTTP 200OK\r\nContent-type:text/html\r\nServer:DWS/1.1\r\n\r\n");
socket.write(dataFile) //socket分成两部写,避免dataFile被字符串化
} catch (error) {
socket.write("HTTP 404NotFound\r\nContent-type:text/html\r\nServer:DWS/1.1\r\n\r\n<html><body><h1></h1>404 Not Found</h1></body></html>");
}
socket.end();
})
})


运行node server.js,在浏览器访问http://127.0.0.1:12306/index.html就可以显示出`index.html`中的页面,如果访问的页面不存在会显示404页面。



微型服务器的编写

在此基础上进行配置文件的编写,从而构建一个node.js微型服务器👇

  • server.conf 配置文件,在里面写入要打开的文件的路径,相对路径和绝对路径都可。
  • conf.js 处理配置信息,暴露出一个全局的配置
  • newserver.js 服务端代码

运行node newserver.js服务器,在浏览器打开http://127.0.0.1:12306/index.html即可成功访问。

代码实现见文首GitHub链接。