最终效果如下
完整代码如下
// index.js
const http = require("http");
const querystring = require("querystring");
const server = http.createServer((req, res) => {
const url = req.url;
const method = req.method;
// 获取请求的路径
const path = url.split("?")[0];
// 获取请求的querystring
const queryStr = url.split("?")[1];
// querystring转对象
const queryObj = querystring.parse(queryStr);
if (path === "/api/list" && method === "GET") {
// 定义返回的响应头, 包含状态码200, 返回类型json
res.writeHead(200, { "Content-type": "application/json" });
// 定义返回的响应体, 包括错误码和返回的数据(4条留言)
const responseBody = {
errno: 0,
data: [
{ user: "张三", content: "张三 真帅!" },
{ user: "李四", content: "李四 真帅!" },
{ user: "王五", content: "王五 真帅!" },
{ user: "赵六", content: "赵六 真帅!" },
],
};
// res.end只能返回字符串, 所以需要把对象转成JSON字符串
res.end(JSON.stringify(responseBody));
} else if (path === "/api/create" && method === "POST") {
let bodyString = "";
// 识别stream,接收数据,chunk,stream的每一段数据
req.on("data", (chunk) => {
// 累加数据
bodyString += chunk.toString();
});
// 服务器通过监听end,来判断数据是否流完了
req.on("end", () => {
console.log(bodyString);
res.end("接收完成");
});
// 定义返回的响应头, 包含状态码200, 返回类型json
res.writeHead(200, { "Content-type": "application/json" });
// 定义返回的响应体, 包括错误码和返回的数据, message为提示信息, data里的id为留言在数据库中的id, 将来通过此id可以从数据库中获取留言的全部信息, 包括作者, 创建时间, 内容, 其他用户针对词条留言的回复, 等等...
const responseBody = {
errno: 0,
data: { id: 1 },
message: "留言创建成功!",
};
// res.end只能返回字符串, 所以需要把对象转成JSON字符串
res.end(JSON.stringify(responseBody));
} else {
res.writeHead(404, { "Content-type": "text/html" });
res.end(
` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> * { padding: 0; margin: 0; } img { width: 100%; } </style> </head> <body> <img src="https://markdown-1253389072.cos.ap-nanjing.myqcloud.com/202203191544993.png" alt="" /> </body> </html> `
);
}
});
server.listen(3000);
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");