编写GET请求和GET请求的返回接口,并使用apipost测试

251 阅读3分钟

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是否符合

  1. 判断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测试,结果正常。