【问题标题】:What is the difference between next() and next('route') in an expressjs app.VERB call?expressjs app.VERB 调用中的 next() 和 next('route') 有什么区别?
【发布时间】:2012-08-02 01:43:20
【问题描述】:

文档如下:

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

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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

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

    ...还有更多...

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • API 很奇怪。如果他们使用next()next_route() 或类似的东西会更有意义。甚至next_middleware()next_route()。对两者使用相同的方法,其中一个采用固定的字符串参数,基本上使它做一些非常不同的事情——这是非常出乎意料的。
      • 谢谢,这对我来说更清楚了。我在想你可以调用类似next('users/:userId') 的东西,或者从它在文档中的样子来看类似的东西。从您的评论看来,您只能传递常量字符串'route' always
      • @iconoclast 加上如果你打电话给next(error),如果你定义了一个,你最终会在错误中捕获所有...一个调用来统治他们所有:-)
      • 另外,next 只是一个标识符名称,我们可以称其为任何名称。因此,next('route') 的一个函数参数就足够了
      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2013-02-07
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多