expressjs app.VERB调用中next()和next('route')之间有什么区别?

时间:2012-08-04 02:08:58

标签: node.js express

文档内容如下:

  

app.VERB()方法在Express中提供路由功能,   其中VERB是HTTP动词之一,例如app.post()。多   可以给予回调,所有被平等对待,并且表现得像   中间件,这些回调可能会调用一个例外   next('route')绕过剩余的路由回调。这个   机制可用于在路线上执行前置条件然后通过   当没有理由继续时,控制到后续路线   路线匹配。

他们的意思是“绕过剩余的路线回调?”?我知道next()会将控制传递给下一个匹配的路由。但是......用next('route')来控制什么功能......?

2 个答案:

答案 0 :(得分:66)

我在5分钟后回答自己的问题时讨厌它。 next('route')是使用路由中间件时。所以如果你有:

app.get('/forum/:fid', middleware1, middleware2, function(){
  // ...
})

函数middleware1()有机会调用next()将控制权传递给middleware2,或next('route')将控制权传递给下一个匹配的路由。

答案 1 :(得分:0)

给出的答案解释了它的主要要点。遗憾的是,它比您想象的要直观得多,当它与参数结合使用时有很多特殊情况。只需查看 the app.param test file 中的一些测试用例。举两个例子:

  1. app .param(name, fn) should defer all the param routes 暗示如果从 next("route") 处理程序调用 param,它将跳过引用该 param 处理程序自己的参数名称的所有后续路由。在该测试用例中,它会跳过所有引用 id 参数的路由。
  2. app .param(name, fn) should call when values differ when using "next" 表明之前的规则还有一个例外:如果参数值在路由之间发生变化,则不要跳过。

...还有更多...

我确信这种 next('route') 杠杆有一个用例,但是,我同意之前的评论,因为它肯定会使事情变得复杂和不直观。