在平时的开发和练习的时候,我们通常会使用一些框架去run一个后台的服务,比如常见的koa, express之类的服务端框架,
今天我变基于原生的http模块去实现一个简单的服务。
- 导入模块
const http = require("http");
const url = require("url");
这里导入了Node.js的http
和url
模块。http
模块用于创建HTTP服务器,而url
模块用于解析URL。
2. 创建HTTP服务器
http.createServer((req, res) => { ... }).listen(98, () => { ... });
使用http.createServer
方法创建一个新的HTTP服务器。这个服务器接受一个回调函数,该回调函数会在每次请求到达时被调用,并传入两个参数:req
(请求对象)和res
(响应对象)。
服务器使用.listen(98, ...)
方法监听98端口。当服务器成功启动时,会调用提供的回调函数,并打印“98端口启动成功”。
3. 解析请求URL
const { pathname, query } = url.parse(req.url, true);
使用url.parse
方法解析请求URL,并将解析后的结果解构为pathname
(路径名)和query
(查询字符串)。这里传入的第二个参数true
意味着查询字符串应该被解析为一个对象,而不是一个字符串。
4. 处理POST请求
if (req.method === "POST") {
...
}
如果请求方法是POST,则执行以下代码块。
- 如果路径名是
/login
,则创建一个空字符串data
来存储请求体数据。 - 监听
data
事件,当接收到请求体的数据块时,将其追加到data
字符串中。 - 监听
end
事件,当请求体数据接收完毕时,设置响应头Content-Type
为application/json
,设置状态码为200,并发送响应,响应体为接收到的请求体数据。
如果路径名不是/login
,则返回404状态码和响应体“404”。
5. 处理GET请求
else if (req.method === "GET") {
...
}
如果请求方法是GET,则执行以下代码块。
- 如果路径名是
/get
,则打印查询字符串对象query
,并发送响应体“GET”。
如果路径名不是/get
,则返回404状态码和响应体“404”。
完整的node.js代码如下
const http = require("http");
const url = require("url");
// 使用原生开发一个http服务器
http
.createServer((req, res) => {
// 序列化为对象
const { pathname, query } = url.parse(req.url, true);
console.log(pathname);
if (req.method === "POST") {
if (pathname === "/login") {
let data = "";
req.on("data", (chunk) => {
data += chunk;
});
req.on("end", () => {
res.setHeader("Content-Type", "application/json");
res.statusCode = 200;
res.end(data);
});
} else {
res.statusCode = 404;
res.end("404");
}
} else if (req.method === "GET") {
if (pathname === "/get") {
console.log(query);
res.end("GET");
} else {
res.statusCode = 404;
res.end("404");
}
}
})
.listen(98, () => {
console.log("98端口启动成功");
});
个HTTP服务器非常基础,主要用于演示如何使用Node.js的http
和url
模块来创建一个简单的服务器,并根据请求方法和路径做出响应。在实际应用中,你可能需要添加更多的功能,比如错误处理、路由处理、中间件等。