Node.js 获取路由节点,如果两条路由相同,它将如何反应?

Node.js 获取路由节点,如果两条路由相同,它将如何反应?,node.js,express,get,routes,Node.js,Express,Get,Routes,我的团队正在与express一起开发API nodejs,我们想知道这些路线是否会发生冲突: 首次获取路径:/aws/volumes/:id 第二个获取路径:/aws/卷/类型 如果有人得到了这方面的信息,请 他们会发生冲突。比如说, 如果首先定义GET/aws/volumes/:id,则以下所有内容都将指向它: GET/aws/volumes/example GET/aws/volumes/qwerty GET/aws/volumes/types 您也可以选择第二条路线绕过上述路线:

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

  • 首次获取路径:/aws/volumes/:id
  • 第二个获取路径:/aws/卷/类型

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

他们会发生冲突。比如说,

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

  • GET/aws/volumes/example
  • GET/aws/volumes/qwerty
  • GET/aws/volumes/types
您也可以选择第二条路线绕过上述路线:

  • GET/aws/volumes?q=类型

它们会发生冲突。比如说,

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

  • GET/aws/volumes/example
  • GET/aws/volumes/qwerty
  • GET/aws/volumes/types
您也可以选择第二条路线绕过上述路线:

  • GET/aws/volumes?q=类型

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

      此外,如果希望更精确地使用“:id”,可以使用正则表达式。更多信息请参见此处的“布线路径”部分


      最后,在这种情况下,您还可以尝试
      next('route')
      指令。不只是调用将调用同一路由的下一个中间件的
      next()
      next('route')
      将控制权传递给下一个匹配的路由处理程序。请参见此处的答案:

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

      此外,如果希望更精确地使用“:id”,可以使用正则表达式。更多信息请参见此处的“布线路径”部分


      最后,在这种情况下,您还可以尝试
      next('route')
      指令。不只是调用将调用同一路由的下一个中间件的
      next()
      next('route')
      将控制权传递给下一个匹配的路由处理程序。请参见此处的答案:

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

      • 首次获取路径:/aws/volumes/:id
      • 第二个获取路径:/aws/卷/类型
      如果您按以下方式提供路由,则它们不会导致冲突

      • 首次获取路线:/aws/卷/类型
      • 第二个获取路径:/aws/volumes/:id

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

      • 首次获取路径:/aws/volumes/:id
      • 第二个获取路径:/aws/卷/类型
      如果您按以下方式提供路由,则它们不会导致冲突

      • 首次获取路线:/aws/卷/类型
      • 第二个获取路径:/aws/volumes/:id

      很清楚,谢谢。但是我能得到它说它总是在第一条路线上的链接吗这里有一个例子。但这取决于您如何结束函数,如果您以
      next()
      结束函数,它将继续。如果您以res.end()或res.json()结束,则它将停止移动到下一个路由。很明显,谢谢。但是我能得到它说它总是在第一条路线上的链接吗这里有一个例子。但这取决于您如何结束函数,如果您以
      next()
      结束函数,它将继续。如果以res.end()或res.json()结束,则它将停止移动到下一个路由。