0%

使用 Router 组织 Express 项目路由

摘要:组织 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
// 1、引入包文件
const express = require("express");

//2、创建一个应用实例
const app = express()
app.use(express.json())

//2.1 创建一个Get请求处理函数
app.get("/",(req,res)=>{
res.send("hello,legalgeek!")
console.log("通过Get请求访问了接口")

})

//2.2 创建一个post 请求处理函数
app.use(express.json())
app.post("",(req,res)=>{
console.log("收到请求: ",req.body) //打印请求体
res.status(200).send()
})

//2.3 创建一个PUT请求
app.put("/:id",(req,res)=>{
console.log("收到参数: ", req.params.id) //打印请求参数id
console.log("收到请求体: ",req.body) //打印请求体
res.status(200).send()
})

//2.4 创建一个DELETE请求
app.delete("/:id",(req,res)=>{
console.log("收到参数:",req.params.id)
res.status(204).send()
})


//3、设定服务端口
const port = 3000

//4、调用服务并打印日志
app.listen(port,'127.0.0.1',()=>{
console.log(`服务在本地${port}端口启动: http://127.0.0.1:${port}`)
})

当前所有访问内容都在根目录/下,如果需要新增一些在其他路径,例如:/user 则势必造成代码的冗长和难以辨别,此时通过拆分访问路由 router,可以解决以上问题:

利用Router 方法实现多个路由

(1)创建路由模块

在项目根目录,新建一个 router 文件夹,在其下新建文件user.js

首先,引入 express 包,并创建一个 Router 实例,命名为 user

1
2
3
4
//1.引入包,并创建实例对象
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
//2.构建路由对象的增删改查方法

//2.1 创建一个Get请求处理函数
user.get("/", (req, res) => {
res.send({ name: "zhangsan", age: 18 });
console.log("通过Get请求访问了接口");
});

//2.2 创建一个post 请求处理函数
user.use(express.json());
user.post("/", (req, res) => {
console.log("收到新增用户请求: ", req.body); //打印请求体
res.status(200).send();
});

//2.3 创建一个PUT请求
user.put("/:id", (req, res) => {
console.log("收到修改用户参数: ", req.params.id); //打印请求参数id
console.log("收到请求体: ", req.body); //打印请求体
res.status(200).send();
});

//2.4 创建一个DELETE请求
user.delete("/:id", (req, res) => {
console.log("收到删除用户参数:", req.params.id);
res.status(204).send();
});

再次,将 user 对象,导出到模块当中:

1
2
//3.将对象导出为模块
module.exports = user;

(2)使用路由模块

首先,将路由模块 user 引入到主入口文件 app.js 当中:

1
const user = require("./router/user")

其次,在主文件当中,调用路由模块 user,并挂载到/user路径之下:

1
app.use("/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
// 1、引入包文件
const express = require("express");

//2、 引入路由文件
const user = require("./router/user");
const basic = require("./router/basic");

//3、创建一个应用实例
const app = express();

//4、使用json中间件
app.use(express.json());

//5、使用已经定义的路由模块
app.use("/user", user);
app.use("/", basic);

//6、设定服务端口
const port = 3000;

//7、调用服务并打印日志
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(); //创建路由实例对象

//2.1 创建一个Get请求处理函数
basic.get("/", (req, res) => {
res.send("hello,legalgeek!");
console.log("通过Get请求访问了接口");
});

//2.2 创建一个post 请求处理函数
basic.use(express.json());
basic.post("", (req, res) => {
console.log("收到请求: ", req.body); //打印请求体
res.status(200).send();
});

//2.3 创建一个PUT请求
basic.put("/:id", (req, res) => {
console.log("收到参数: ", req.params.id); //打印请求参数id
console.log("收到请求体: ", req.body); //打印请求体
res.status(200).send();
});

//2.4 创建一个DELETE请求
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();

//2.1 创建一个Get请求处理函数
user.get("/", (req, res) => {
res.send({ name: "zhangsan", age: 18 });
console.log("通过Get请求访问了接口");
});

//2.2 创建一个post 请求处理函数
user.use(express.json());
user.post("/", (req, res) => {
console.log("收到新增用户请求: ", req.body); //打印请求体
res.status(200).send();
});

//2.3 创建一个PUT请求
user.put("/:id", (req, res) => {
console.log("收到修改用户参数: ", req.params.id); //打印请求参数id
console.log("收到请求体: ", req.body); //打印请求体
res.status(200).send();
});

//2.4 创建一个DELETE请求
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/

返回:

1
hello,legalgeek!