56

文档内容如下:

app.VERB() 方法在 Express 中提供路由功能,其中 VERB 是 HTTP 动词之一,例如 app.post()。可以给出多个回调,所有回调都被平等对待,并且表现得就像中间件一样,除了一个例外,这些回调可能会调用 next('route') 来绕过剩余的路由回调。此机制可用于在路由上执行先决条件,然后在没有理由继续匹配路由时将控制权传递给后续路由。

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

4

2 回答 2

88

当我在 5 分钟后回答我自己的问题时,我讨厌它。 next('route')是在使用路由中间件的时候。因此,如果您有:

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

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

于 2012-08-04T02:16:08.313 回答
1

给定的答案解释了它的主要要点。可悲的是,它远没有你想象的那么直观,当它与参数结合使用时有很多特殊情况。只需查看app.param 测试文件中的一些测试用例。举两个例子:

  1. app .param(name, fn) 应该推迟所有参数路由,这意味着如果next("route")从处理程序调用param,它将跳过引用该param处理程序自己的参数名称的所有后续路由。在该测试用例中,它会跳过所有引用该id参数的路由。
  2. app .param(name, fn) 应该在使用“next”时值不同时调用,这表明前面的规则还有另一个例外:如果参数的值在路由之间发生变化,则不要跳过。

……还有更多……

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

于 2020-12-27T11:18:00.707 回答