ExpressJS下一步('路线')正在打破我的路线

我正在testing下面的代码行。

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

任何人有任何build议/想法为什么发生这种情况?

事实上,我相信它redirect到我的'/'路由器,而不是我的'/ api'路由器,因为当我添加一个默认路由到我的'/'路由器,我得到的路线,而不是404错误。

文档解释:

您可以提供多个callback函数,其行为就像中间件一样,除了这些callback可以调用next('route')来跳过剩余的路由callback(s)

换句话说,通过调用next('route')您告诉Express不会为您路过的其他callback而烦恼。

这与中间件callback和路由处理器callback实际上是一回事,Express没有办法知道你传递的最后一个callback实际上是你想要调用的callback。

解决这个问题的方法之一是将路由中间件部分从路由处理部分中分离出来:

 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' }); });