vin*_*eet 1 routes node.js express
以下是我的路线代码:-
app.get('/server/lead/get/:id?', leadCtrl.get);
app.get('/server/lead/filter/:filterQuery', leadCtrl.get);
正如您在上面看到的,我使用不同的路由来访问相同的控制器方法leadCtrl.get。
现在,我想要类似 route 的东西app.get('/server/lead/get/:id?:filter?', leadCtrl.get);。所以,我可以得到参数,req.params.id或者req.params.filter一次只能得到一个。
您在问题中提出的问题不可能以您描述的形式出现。
现在,我想要类似 route app.get('/server/lead/get/:id?:filter?',leadCtrl.get); 的东西。所以,我可以得到参数 req.params.id 或 req.params.filter 但一次只能得到一个。
您的路由器无法区分这两个参数。如果它有一个请求,/server/lead/get/X那么 X 是什么?过滤器还是ID?
您在这里有几个解决方案:
您可以像以前一样继续使用两条路线。
正如罗伯特在评论中所解释的那样,您可以对这两种情况使用通用参数。
或者您可以使用在我看来是您用例的完美解决方案 - 命名查询参数 - 只需使用路由/server/lead/get并使用查询参数来传递 id 和过滤器。
示例网址:
/server/lead/get?id=xxx/server/lead/get?filterQuery=xxx您只需要确保在您的处理程序中一次只设置这两个中的一个,如下所示:
if (req.query.id && req.query.filterQuery) {
  // respond with error
}
如果您有app.get('/server/lead/get/:id?')路线,您甚至可以将两者混合使用,您可以将路线中的 id 和 filterQuery 作为查询参数。现在 URL 将是:
/server/lead/get/xxx (身份证)/server/lead/get?filterQuery=xxx (用于过滤器)有关更多信息,请参阅:http : //expressjs.com/en/api.html#req.query
如果您遵循一些REST 约定,则可以使用:
这样,当您访问时,您将始终知道:
/server/lead/xxx- 那么它是一个ID = xxx 的对象/server/lead- 那么它是任何对象的列表/server/lead?filterQuery=xxx- 然后它是与查询匹配的对象列表如果您对此类事情遵循 REST 约定而不是自己发明,那么您设计路由和处理程序会容易得多,并且其他人使用您的系统也会容易得多。
您可能还想使用复数 /server/leads而不是/server/leadREST 中常见的复数形式。这样,它leads是一个列表并且leads/id是它的元素之一将更加明显。
有关更多信息,请参阅:
| 归档时间: | 
 | 
| 查看次数: | 12529 次 | 
| 最近记录: |