// 1.引入模块
const http = require("http");
const fs = require("fs");
const qs = require("querystring");
const url = require("url");
// 2.创建服务器
const serverObj = http.createServer((req, res) => {
const urlObj = url.parse(req.url);
// 路由判断 pathname是否包含api? 是数据响应 否静态响应
if (urlObj.pathname.includes("/api")) {
dataHandle(req, res);
} else {
staticHandle(req, res);
}
}) //可以不用const serverObj,在此处直接.listen
// 挂载到指定端口
serverObj.listen(3000, () => {
console.log("服务器开启成功: http://localhost:3000");
})
// 3.数据请求
function dataHandle(req, res) {
// 判断请求方法(req.method解析请求方式 get post...)
if (req.method === "GET") {
// 解析get数据 得到query部分 xx=xx url.parse得到对象
const obj = url.parse(req.url, true).query;
fn(req, res, obj);
} else if (req.method === "POST") {
// 解析post数据 通过data事件配合end事件获取post携带的数据,qs.parse得到对象
let str = "";
req.on("data", (d) => {
str += d; //把数据拼接
})
req.on("end", () => {
const obj = qs.parse(str); //解析成对象
fn(req, res, obj);
})
}
}
// 4.获取到的数据reqData
function fn(req, res, reqData) {
// 根据信息执行功能
// 打印到后端测试是否拿到 (测试)
console.log(reqData);
// 定义对象放数据 转json发给前端(测试)
const obj = {
title: "这是后端接收到的数据,又还给前端了",
data: reqData //对象
}
res.write(JSON.stringify(obj)); //转json发给前端
res.end();
}
// 5.静态资源请求
function staticHandle(req, res) {
// 解析req.url,找到pathname部分,地址带别的东西也能找到
const urlObj = url.parse(req.url);
// 主动读取文件
fs.readFile("./www" + urlObj.pathname, (err, data) => {
if (err) {
res.write("notFound");
} else {
res.write(data);
}
res.end(); //放到回调函数内,保证write在end之前
})
}
<node.js>搭建简易服务器
最新推荐文章于 2024-10-18 17:06:57 发布