expressjs 应用程序中的 next() 和 next('route') 有什么区别。动词调用?

What is the difference between next() and next('route') in an expressjs app.VERB call?

提问人:Merc 提问时间:8/4/2012 最后编辑:ThinkingStiffMerc 更新时间:12/27/2020 访问量:16000

问:

文档内容如下:

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

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

节点.js Express

评论


答:

94赞 Merc 8/4/2012 #1

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

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

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

评论

29赞 iconoclast 10/31/2015
API 很奇怪。如果他们使用 和 或类似的东西会更有意义。甚至和.对两者使用相同的方法,其中一个采用固定字符串参数,基本上使它做一些非常不同的事情——这是非常出乎意料的。next()next_route()next_middleware()next_route()
13赞 willko747 12/28/2015
谢谢,这对我来说更清楚了。我以为你可以从它在文档中的样子来称呼类似的东西。从您的评论中听起来您只能始终传递常量字符串。next('users/:userId')'route'
3赞 Will59 8/18/2020
@iconoclast另外,如果你调用,如果你定义了一个,你最终会陷入错误 catch all...一个电话来统治他们所有人:-)next(error)
0赞 Bharat 11/14/2021
此外,只是一个标识符名称,我们可以称它为任何东西。因此,一个函数参数应该足够了nextnext('route')
0赞 Muhammad Umer 1/4/2022
stackoverflow.com/questions/49495319/......
1赞 Domi 12/27/2020 #2

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

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

...还有更多...

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