我可以使用具有相同路径和不同参数名称的多个 get 请求吗?
Can i use multiple get request with same path and different parameter names?
我想知道是否可以有多个具有相同路径但参数名称不同的 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);
我想知道是否可以有多个具有相同路径但参数名称不同的 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);