【发布时间】:2018-11-10 14:02:23
【问题描述】:
我的团队正在使用 express 开发 API nodejs,我们想知道这些路由是否会发生冲突:
- 第一个 GET 路由:/aws/volumes/:id
- 第二个 GET 路由:/aws/volumes/types
如果有人得到这方面的信息,请。
【问题讨论】:
标签: node.js express get routes
我的团队正在使用 express 开发 API nodejs,我们想知道这些路由是否会发生冲突:
如果有人得到这方面的信息,请。
【问题讨论】:
标签: node.js express get routes
第一个匹配请求的路由将获胜!这意味着两者都可以匹配相同的请求。因此,您应该将最具体的放在第一位,即“/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?
【讨论】:
是的,这些路由会发生冲突。如果您按以下顺序提供路线,尽管您调用“/aws/volumes/types”,但它始终会到达第一条路线。
如果您提供如下路线,则不会导致冲突。
【讨论】:
next() 结束,它将继续。如果您以res.end() or res.json() 结尾,那么它将停止移动到下一条路线。
他们会发生冲突。例如,
如果你先定义GET /aws/volumes/:id,那么下面所有的都会指向它:
GET /aws/volumes/exampleGET /aws/volumes/qwertyGET /aws/volumes/types您也可以选择第二条路线来绕过上述情况:
GET /aws/volumes?q=types【讨论】: