GET路由nodejs,如果两条路由相同,它将如何反应?

时间:2018-05-31 14:09:07

标签: node.js express get routes

我的团队正在开发一个带有express的API nodejs,我们想知道这些路线是否会发生冲突:

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

如果有人得到了相关信息,请。

3 个答案:

答案 0 :(得分:1)

他们会发生冲突。例如,

如果您先定义GET /aws/volumes/:id,则以下所有内容都会指向它:

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

您也可以选择第二条路线来解决上述问题:

  • GET /aws/volumes?q=types

答案 1 :(得分:1)

是的,这些路线会发生冲突。如果您按以下顺序提供路线,虽然您拨打' / aws / volumes / types'但它始终会在第一条路线上出现。

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

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

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

答案 2 :(得分:0)

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

此外,如果您希望更精确地使用您期望的“:id”,则可以使用正则表达式。点击此处查看:“路径路径”部分中的http://expressjs.com/en/guide/routing.html

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