我想知道是否可以有多个具有相同路径但具有不同参数名称的get请求?
他们会互相凌驾吗?或者我应该以不同的方式组织我的路径?
router.get('/:id', functionA);
router.get('/:username', functionB);
functionA(id) {
// return orders by id;
}
functionB(username) {
// return orders by username
}
尝试同时使用这两种方法会发生冲突:
router.get('/:id', functionA);
router.get('/:username', functionB);
由于请求按照声明的顺序匹配,并且这两个路由都与每个顶级URL匹配,因此该路由的每个传入请求都将与第一个请求匹配,并且它将处理所有请求。只有在functionA
内部使用某种算法来确定哪些实际请求属于它,然后对不属于functionA
的请求调用next()
,才会调用functionB
。
而且,即使你找到了使用上述逻辑实现这一点的方法,这也不是一个好的设计方法。您应该从URL的结构中明确给定URL的目的地是哪个请求处理程序。
我不知道你的应用程序的整个结构或你的整体URL设计,但像这样的东西在这个路由器级别会更清晰,没有冲突:
router.get('/id/:id', functionA);
router.get('/user/:username', functionB);