Node.js 获取路由节点,如果两条路由相同,它将如何反应?
我的团队正在与express一起开发API nodejs,我们想知道这些路线是否会发生冲突: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 您也可以选择第二条路线绕过上述路线:
- 首次获取路径:/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/:id
- 第二个获取路径:/aws/卷/类型
- 首次获取路线:/aws/卷/类型
- 第二个获取路径:/aws/volumes/:id
next()
结束函数,它将继续。如果您以res.end()或res.json()结束,则它将停止移动到下一个路由。很明显,谢谢。但是我能得到它说它总是在第一条路线上的链接吗这里有一个例子。但这取决于您如何结束函数,如果您以next()
结束函数,它将继续。如果以res.end()或res.json()结束,则它将停止移动到下一个路由。