代码之家  ›  专栏  ›  技术社区  ›  Cupkek05

获取路由nodejs,如果两个路由相同,它将如何反应?

  •  0
  • Cupkek05  · 技术社区  · 6 年前

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

    • 第一个获取路径:aws/volumes/:id
    • 第二条获取路径:aws/volumes/types

    如果有人知道这件事,请告诉我。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Sreehari    6 年前

    是的,这些路线会有冲突。如果您按以下顺序提供路由,那么它始终会到达第一个路由,尽管您调用了'/aws/volumes/types'。

    • 第一个获取路径:aws/volumes/:id
    • 第二条获取路径:aws/volumes/types

    如果您提供以下路径,则它们不会导致冲突。

    • 第一个获取路径:aws/volumes/types
    • 第二条获取路径:aws/volumes/:id
        2
  •  1
  •   Cisco    6 年前

    他们会发生冲突。例如,

    如果你定义 GET /aws/volumes/:id 首先,下面所有内容都将指向它:

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

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

    • GET /aws/volumes?q=types
        3
  •  0
  •   laudeon    6 年前

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

    此外,如果您希望更精确地使用“:id”,则可以使用正则表达式。更多信息请参见: http://expressjs.com/en/guide/routing.html 在“路由路径”部分。

    最后,你也可以试试 next('route') 本例中的说明。而不是打电话 next() 它将调用同一路由的下一个中间件, 下一条(“路线”) 将控制权传递给下一个匹配的路由处理程序。请看这里的答案: What is the difference between next() and next('route') in an expressjs app.VERB call?