对express 应用级中间件next('route') 方法实例的疑惑
对express
官网 的实例有点疑惑,不知道为什么这样书写.
官网的代码是这样的
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
app.get('/user/:id', function (req, res, next) {
// 如果 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next('route');
// 否则将控制权交给栈中下一个中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
});
// 处理 /user/:id, 渲染一个特殊页面
app.get('/user/:id', function (req, res, next) {
res.render('special');
});
以下是我个人想法,不知道和上面的代码有什么区别?
app.get('/user/:id', function (req, res, next) {
if (req.params.id == 0) {
res.render('special');
} else {
res.render('regular');
};
})
附上网址 (http://www.expressjs.com.cn/g...应用级中间件
的第四个实例 next('route')
方法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
先回答楼主的问题
首先,官方这段代码实现的效果,跟楼主修改后代码的效果是差不多的。
其次,官网这段代码的主要目的,是告诉使用者,
next('route')
的用途。最后,至于官网为什么要这样写,得从Express的路由机制谈起。
Express路由分组机制
Express的路由内部实现比较复杂,这里只挑跟题目有关的讲。
Express中,路由是以组的形式添加的。什么意思呢,可以看下面伪代码
在内部,Express把上面添加的路由,分成了两个组。继续看伪代码,可以看到,路由在内部被分成了两个组。
路由匹配就是个遍历的过程,略。
next('route')是干嘛的
答案:跳过当前路由分组中,剩余的handler(中间件)
如果没有
next('route')
,一路next()
调用下去的话,调用顺序是这样的:假设某些情况下,在执行了
fn1
后,想要跳过fn2
、fn3
,怎么办?(比如楼主举的例子)答案就是在
fn1
里调用next('route')
。然后就变成了
完。
示例的重点在于展示中间件及next的用法,不是去实现某个具体的业务需求。