【问题标题】:GET routes nodejs, how it will react if 2 routes are the same?GET路由nodejs,如果2条路由相同,它将如何反应?
【发布时间】:2018-11-10 14:02:23
【问题描述】:

我的团队正在使用 express 开发 API nodejs,我们想知道这些路由是否会发生冲突:

  • 第一个 GET 路由:/aws/volumes/:id
  • 第二个 GET 路由:/aws/volumes/types

如果有人得到这方面的信息,请。

【问题讨论】:

    标签: node.js express get routes


    【解决方案1】:

    第一个匹配请求的路由将获胜!这意味着两者都可以匹配相同的请求。因此,您应该将最具体的放在第一位,即“/aws/volumes/types”。这样,如果您请求“/aws/volumes/types”,它将运行“types”路由的处理程序,否则,它将运行“:id”路由的处理程序。

    此外,如果您想更精确地处理“:id”的预期,您可以使用正则表达式。在此处查看更多信息:http://expressjs.com/en/guide/routing.html 在“路由路径”部分。

    最后,这种情况下你也可以试试next('route')指令。 next('route') 不只是调用 next() 来调用同一路由的下一个中间件,而是将控制权传递给下一个匹配的路由处理程序。在这里查看答案:What is the difference between next() and next('route') in an expressjs app.VERB call?

    【讨论】:

      【解决方案2】:

      是的,这些路由会发生冲突。如果您按以下顺序提供路线,尽管您调用“/aws/volumes/types”,但它始终会到达第一条路线。

      • 第一个 GET 路由:/aws/volumes/:id
      • 第二个 GET 路由:/aws/volumes/types

      如果您提供如下路线,则不会导致冲突。

      • 第一个 GET 路由:/aws/volumes/types
      • 第二个 GET 路由:/aws/volumes/:id

      【讨论】:

      • 很清楚,谢谢。但是我可以有它说它总是打第一条路线的链接吗? :)
      • expressjs.com/en/4x/api.html#router.param 这里有一个例子。不过,这取决于您如何结束该功能,如果您以next() 结束,它将继续。如果您以res.end() or res.json() 结尾,那么它将停止移动到下一条路线。
      【解决方案3】:

      他们会发生冲突。例如,

      如果你先定义GET /aws/volumes/:id,那么下面所有的都会指向它:

      • GET /aws/volumes/example
      • GET /aws/volumes/qwerty
      • GET /aws/volumes/types

      您也可以选择第二条路线来绕过上述情况:

      • GET /aws/volumes?q=types

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-28
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        相关资源
        最近更新 更多