Node.js Express框架实现一个简单类似Vue Router的路由器

夏沫花火zzz🌙 (Muska_Ami) Lv4

说明

首先新建一个新的js,比如此处我用的是 router.js
我们先来看看逻辑,首先我们想要通过JSON字段来定义Route,所以创建了一个叫做routes的数组:

1
2
3
4
5
6
7
const routes = [
{
path: '/your/path',
method: 'GET',
run: require('./path/to/your/js'),
},
]

可以看到每项包含了 path method run 三个值
作用如下

  • path 定义预期请求路径
  • method 定义预期请求方法
  • run 定义当 path , method 均符合时,要导入执行的JS

然后我们要处理这段JSON,可以遍历数组值然后分别挂载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
routes.forEach((route) => {
switch (route.method) {
case 'GET':
app.get(route.path, (req, res, _next) => {
// Express的奇怪特性 明明是app.<method>但是似乎会响应所有请求
// 这里加个条件避免混淆
if (req.method == 'GET' && route.method == 'GET') {
route.run(req, res)
return // 终止运行,防止与中间件冲突
}
_next()
})
// 更多请求方法...
}
})

完整示例代码

app.js

1
2
3
4
const router = require('./router')
//...
router(app)
//...

router.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
module.exports = (app) => {
const routes = [
{
path: '/your/path',
method: 'GET',
run: require('./path/to/your/js'),
},
]

routes.forEach((route) => {
switch (route.method) {
case 'GET':
app.get(route.path, (req, res, _next) => {
if (req.method == 'GET' && route.method == 'GET') {
route.run(req, res)
return
}
_next()
})
case 'POST':
app.post(route.path, (req, res, _next) => {
if (req.method == 'POST' && route.method == 'POST') {
route.run(req, res)
return
}
_next()
})
case 'DELETE':
app.delete(route.path, (req, res, _next) => {
if (req.method == 'DELETE' && route.method == 'DELETE') {
route.run(req, res)
return
}
_next()
})
// More methods...
}
})
}
  • 标题: Node.js Express框架实现一个简单类似Vue Router的路由器
  • 作者: 夏沫花火zzz🌙 (Muska_Ami)
  • 创建于 : 2023-11-28 04:00:35
  • 更新于 : 2024-09-03 10:21:07
  • 链接: https://blog.muska.zip/2023/11/27/node.js-express-kuang-jia-shi-xian-yi-ge-lei-si-vue-router-de-lu-you-qi/
  • 版权声明: 本文章采用 CC BY-SA 4.0 进行许可。
 评论
此页目录
Node.js Express框架实现一个简单类似Vue Router的路由器