ExpressJS next('route')正在打破我的路线

Bre*_*eli 1 node.js express

我正在测试以下代码行.

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' });
});
Run Code Online (Sandbox Code Playgroud)

它按预期工作.但是在尝试添加时:

console.log('middleware 1');
next('route');
Run Code Online (Sandbox Code Playgroud)

而是在中间件1中,所以我可以跳过中间件2,我在路由上遇到404错误:无法GET/api/testAPI

谁有任何关于为什么会这样的建议/想法?

实际上我相信它会重定向到我的'/'路由器而不是我的'/ api'路由器,因为当我在我的'/'路由器中添加一个默认路由时,我得到的路由而不是404错误.

rob*_*lep 5

文件解释说:

你可以提供多个类似中间件的回调函数,除了这些回调可以调用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' });
});
Run Code Online (Sandbox Code Playgroud)