摘要:使用nodejs
的Express
包,创建增删改查 API 接口 demo
开发环境准备 新建项目文件夹,并在终端打开:
1 2 mkdir express-api cd express-api
初始化 nodejs 工程,并查看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 node init -y //终端反馈: Wrote to /Users/zhangminglei/Documents/git/express-api/package.json: { "name" : "express-api" , "version" : "1.0.0" , "description" : "" , "main" : "index.js" , "scripts" : { "test" : "echo \"Error: no test specified\" && exit 1" }, "keywords" : [], "author" : "" , "license" : "ISC" }
安装 express 包文件:
1 2 3 4 5 6 7 8 9 npm install express //终端反馈: added 50 packages, and audited 51 packages in 3s 2 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
查看安装后文件目录:
1 2 3 4 ls //终端反馈: node_modules package-lock.json package.json
通过命令行在当前目录打开 VSCode
初始运行服务 1、在文件根目录 创建一个入口文件 app.js
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 const express = require ("express" );const app = express();const port = 3000 ;app.listen(port, "127.0.0.1" , () => { console .log(`服务在本地${port} 端口启动: http://127.0.0.1:${port} ` ); });
2、使用 node 运行 app.js
,在 VSCode 终端当中输入:
1 2 3 4 node app.js //反馈: 服务在本地3000端口启动: http://127.0.0.1:3000
3、浏览器访问:http://127.0.0.1:3000 显示以下内容
原因:此时只是启动了一个服务,但是没有定义各种get
请求的处理方法,后面将创建各种请求方法处理函数。
定义一个 GET 请求 1、修改 app.js
文件,在//2、创建一个应用实例
增加内容如下:
1 2 3 4 5 app.get("/" , (req, res ) => { res.send("hello,legalgeek" ); console .log("有人通过Get请求访问了接口" ); });
2、重启 app.js
服务,浏览器刷新访问
1 2 3 4 5 node app.js 服务在本地3000 端口启动: http: 有人通过Get请求访问了接口
优化:修改后自动重启 痛点:目前修改的代码,需要手动重启服务才能运行,考虑使用 nodemon
实现保存后自动重启服务。
(1)安装 nodemon
1 2 3 4 5 6 7 npm install nodemon added 117 packages, and audited 168 packages in 38s 18 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
(2)修改文件根目录下的 package.json
当中"scripts"
部分,内容如下:
1 2 3 "scripts" : { "dev" : "nodemon app.js" },
(3)在 vs code 终端当中运行:npm run dev
1 2 3 4 5 6 7 8 9 10 11 12 ✗ npm run dev //系统反馈: > express-api@1.0.0 dev > nodemon app.js [nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node app.js` 服务在本地3000端口启动: http://127.0.0.1:3000
(4)尝试修改 app.js
后保存,实现项目的自动重启
定义一个 POST 请求 浏览器访问的请求为 Get 请求,可以使用 Postman 等工具,构造 post 请求查询文档,post 一般使用 json 进行文件的传输,因此需要 express 具备 json 格式文件的处理能力。
(1)使用 express.json()
中间件,以处理 json 请求
(2)在 get 请求代码之下,定义一个 post 请求:
1 2 3 4 5 6 app.use(express.json()); app.post("" , (req, res ) => { console .log("收到请求: " , req.body); res.status(200 ).send(); });
(3) 使用 postman 发送 POST 请求:访问 http://127.0.0.1:3000
构造 Body – raw – JSON 请求参数
1 2 3 { "hello" : "hello minglei!" }
(4) 发送请求后,在 vs code 终端自动展示请求日志:
1 收到请求: { hello: 'hello minglei!' }
(5) 如果没有安装 postman,可以使用终端访问接口:
1 2 3 4 5 curl --location --request POST 'http://127.0.0.1:3000' \ --header 'Content-Type: application/json' \ --data-raw '{ "hello":"hello minglei!" }'
定义一个 PUT 请求 Put 请求用于更新一个指定的文档,需要设定文档唯一标识 ID 传递给服务器,在 post 请求之下,定义一个 Put 请求处理函数:
1 2 3 4 5 6 app.put("/:id" ,(req,res)=>{ console.log("收到参数: " , req.params.id) console.log("收到请求体: " ,req.body) res.status(200).send() })
与 post 请求相比,主要变化点:支持接受参数:id
,并支持使用 req.params.id
获取 ID.
同样使用 postman 进行接口的测试:
例如 PUT 访问:http://127.0.0.1:3000/123
在 vs code 终端将显示内容:
1 2 收到参数: 123 收到请求体: { hello: 'hello minglei!' }
定义一个 DELETE 请求 与 PUT 请求类似,DELETE 请求也需要接收 ID 参数,具体定义如下:
1 2 3 4 5 //2.4 创建一个DELETE请求 app.delete("/:id",(req,res)=>{ console.log("收到参数:",req.params.id) res.status(204).send() })
同样使用 postman 进行接口的测试:
例如 DELETE 访问:http://127.0.0.1:3000/123
在 vs code 终端将显示内容:
最终完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 const express = require ("express" );const app = express();app.use(express.json()); app.get("/" , (req, res ) => { res.send("hello,legalgeek!" ); console .log("通过Get请求访问了接口" ); }); app.use(express.json()); app.post("" , (req, res ) => { console .log("收到请求: " , req.body); res.status(200 ).send(); }); app.put("/:id" , (req, res ) => { console .log("收到参数: " , req.params.id); console .log("收到请求体: " , req.body); res.status(200 ).send(); }); app.delete("/:id" , (req, res ) => { console .log("收到参数:" , req.params.id); res.status(204 ).send(); }); const port = 3000 ;app.listen(port, "127.0.0.1" , () => { console .log(`服务在本地${port} 端口启动: http://127.0.0.1:${port} ` ); });