我正在测试以下代码行。
router.get('/testAPI', function(req, res, next){
console.log('middleware 1');
next();
}, function(req, res, next) {
console.log('middleware 2');
next();
}, function(req, res){
res.send({ SecretData: 'abc123' });
});
它按预期工作。但是在尝试添加时:
console.log('middleware 1');
next('route');
而不是中间件1所以我可以跳过中间件2,我在路由上遇到404错误:无法GET / api / testAPI
任何人对此为何会有任何建议/想法?
实际上我相信它会重定向到我的'/'路由器而不是我的'/ api'路由器,因为当我在我的'/'路由器中添加一条默认路由时,我得到的路由而不是404错误。
答案 0 :(得分:5)
documentation解释说:
你可以提供多个类似中间件的回调函数,除了这些回调可以调用next('route')到绕过剩余的路由回调
换句话说,通过调用next('route')
,您告诉Express不要打扰您为该路由传递的其余回调。
这与中间件回调和路由处理程序回调实际上是一回事,Express无法知道您传递的最后一个回调实际上是您想要调用的回调。
解决这个问题的一种方法是从路线的路线处理部分拆分路线的中间件部分:
app.get('/testAPI', function(req, res, next) {
console.log('middleware 1');
next('route');
}, function(req, res, next) {
// skipped...
console.log('middleware 2');
next();
});
app.get('/testAPI', function(req, res) {
res.send({ SecretData: 'abc123' });
});