1.nojs启动web服务
使用http服务
commonjs 移入模块
const http = require("http
node里面运行code run,监听 3000端口
2.初始化项目
npm init-y
安装nodemon npm install nodemon --save-dev
安装完nodemon, 修改package.json,(test下面添加"dev:"nodemon index.js") 编写相关的任务
再去访问http://localhose:3000
这时候的完整代码如下
// index.js
// commonjs 移入模块
const http = require("http");
// createServer 顾名思义, 可以创建一个服务, 不过需要接收一个回调函数做参数
const server = http.createServer(() => {
console.log("已经收到http请求");
});
// 监听3000端口
server.listen(3000);
// 输出提示
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");
每一次修改代码,都要去开启服务``nodejs里面 npm run dev
3.定义路由
1 从req获取url和method
2.判断method是否符合
- 判断url是否符合
安装测试接口的测试工具apipost
开启服务以后,把原来的http://localhost:3000,复制到apipost里面,用GET或者POST请求都可以
这时候的代码如下
// index.js
const http = require("http");
const server = http.createServer((req, res) => {
const url = req.url;
const method = req.method
res.end(`url is: ${url}, method is: ${method}`);
});
server.listen(3000);
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");
如果url的后面带参数,也就是http://localhost:3000后面有参数,需要把url 和url后面的参数分开,这里用到了split,意思是把一个字符串分割成字符串数组,url是数组里面的第0项目,所以加下标[0],也就是url.split("?")0
这时候的GET请求代码如下
// index.js
const http = require("http");
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 = {};
queryStr.split("&").forEach((item) => {
const key = item.split("=")[0];
const value = item.split("=")[1];
queryObj[key] = value;
});
if (path === "/api/list" && method === "GET") {
res.end(`您正在请求留言板列表接口! 将返回${queryObj.number}条留言!`);
} else {
res.end("别瞎写! [○・`Д´・ ○]");
}
});
server.listen(3000);
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");
改完代码,开启服务,把url复制到apipost里面去测试
http://localhost:3000/api/list?number=100
4.GET请求的写完了,开始写实现get请求的返回 完整的代码如下
// 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);
// 打印对象
console.log(queryObj);
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 {
res.end("别瞎写! [○・`Д´・ ○]");
}
});
server.listen(3000);
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");
nodejs开启服务后,把url复制到apipost测试,选择GET
http://localhost:3000/api/list?number=4
把这个复制到apipost测试,结果正常。