摘要:组织 Express 项目代码,拆分路由Router
模块结构,增强代码可读性并方便后续维护。
前情提要
我们在 “使用 Express 创建增删改查 API 示例接口” 一文中,创建了基本代码实现了增删改查。
现状分析:
1、代码整体比较长,各部分维护需要仔细辨别,具有拆解的必要性
2、代码块之间实际没有强关联,具有拆解的可能性
预期摘要:
1、拆分模块
2、清理目录
现有项目结构
现有项目,所有内容集中在app.js
当中,详见:
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: })
|
当前所有访问内容都在根目录/
下,如果需要新增一些在其他路径,例如:/user
则势必造成代码的冗长和难以辨别,此时通过拆分访问路由 router
,可以解决以上问题:
利用Router
方法实现多个路由
(1)创建路由模块
在项目根目录,新建一个 router 文件夹,在其下新建文件user.js
首先,引入 express
包,并创建一个 Router
实例,命名为 user
:
1 2 3 4
| const express = require("express");
const user = express.Router();
|
其次,定义 user
对象的增删改查方法:
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
|
user.get("/", (req, res) => { res.send({ name: "zhangsan", age: 18 }); console.log("通过Get请求访问了接口"); });
user.use(express.json()); user.post("/", (req, res) => { console.log("收到新增用户请求: ", req.body); res.status(200).send(); });
user.put("/:id", (req, res) => { console.log("收到修改用户参数: ", req.params.id); console.log("收到请求体: ", req.body); res.status(200).send(); });
user.delete("/:id", (req, res) => { console.log("收到删除用户参数:", req.params.id); res.status(204).send(); });
|
再次,将 user
对象,导出到模块当中:
(2)使用路由模块
首先,将路由模块 user 引入到主入口文件 app.js
当中:
1
| const user = require("./router/user")
|
其次,在主文件当中,调用路由模块 user,并挂载到/user
路径之下:
最后,保存文件并重启项目,访问:http://127.0.0.1:3000/user 验证结果
(3) 引入多个路由
如法炮制,将原来的/
根目录增删改查方法也封装进路由模块 basic.js
当中
最终app.js
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const express = require("express");
const user = require("./router/user"); const basic = require("./router/basic");
const app = express();
app.use(express.json());
app.use("/user", user); app.use("/", basic);
const port = 3000;
app.listen(port, "127.0.0.1", () => { console.log(`服务在本地${port}端口启动: http://127.0.0.1:${port}`); });
|
最终 /router/basic.js
文件:
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
| const express = require("express");
const basic = express.Router();
basic.get("/", (req, res) => { res.send("hello,legalgeek!"); console.log("通过Get请求访问了接口"); });
basic.use(express.json()); basic.post("", (req, res) => { console.log("收到请求: ", req.body); res.status(200).send(); });
basic.put("/:id", (req, res) => { console.log("收到参数: ", req.params.id); console.log("收到请求体: ", req.body); res.status(200).send(); });
basic.delete("/:id", (req, res) => { console.log("收到参数:", req.params.id); res.status(204).send(); });
module.exports = basic;
|
最终/router/user.js
文件:
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
| const express = require("express");
const user = express.Router();
user.get("/", (req, res) => { res.send({ name: "zhangsan", age: 18 }); console.log("通过Get请求访问了接口"); });
user.use(express.json()); user.post("/", (req, res) => { console.log("收到新增用户请求: ", req.body); res.status(200).send(); });
user.put("/:id", (req, res) => { console.log("收到修改用户参数: ", req.params.id); console.log("收到请求体: ", req.body); res.status(200).send(); });
user.delete("/:id", (req, res) => { console.log("收到删除用户参数:", req.params.id); res.status(204).send(); });
module.exports = user;
|
(4)测试路由结果
访问:http://127.0.0.1:3000/user
返回:
1 2 3 4
| { "name": "zhangsan", "age": 18 }
|
访问:http://127.0.0.1:3000/
返回: