使用搜索参数快速路由 GET
Posted
技术标签:
【中文标题】使用搜索参数快速路由 GET【英文标题】:Express routing GET with search params 【发布时间】:2014-01-29 17:15:12 【问题描述】:我有两条获取商店的 GET 路线,但一条路线用于获取所有商店,另一条路线用于获取附近的商店。
1) 获取所有店铺的url请求如下:
http://mydomain/stores
2) 获取附近所有店铺的url:
http://mydomain/stores?lat=lat&lng=lng&radius=radius
问题是:
如何在 Express 中正确映射这些 url,从而将每个路由重定向到相应的方法?
app.get('/stores', store.getAll);
app.get('/stores', store.getNear);
【问题讨论】:
【参考方案1】:app.get('/stores', function(req, res, next)
if(req.query['lat'] && req.query['lng'] && req.query['radius'])
store.getNear(req, res, next);
else
store.getAll(req, res, next)
;
);
编辑 - 第二种方法:
store.getNear = function(req, res, next)
if(req.query['lat'] && req.query['lng'] && req.query['radius'])
// do whatever it is you usually do in getNear
else // proceed to the next matching routing function
next()
;
store.getAll = function(req, res, next)
// do whatever you usually do in getAll
app.get('/stores', store.getNear, store.getAll)
// equivalent:
// app.get('/stores', store.getNear)
// app.get('/stores', store.getAll)
【讨论】:
请注意,如果 lat/lng/radius 为零,这将失败,因为这是错误的;如果这是一个问题,您可以针对undefined
进行显式测试
我的想法是避免使用 if 但是,如果没有其他方法,没关系!
我发布了另一种方法,但是您为什么希望能够在没有if
某处的情况下根据情况为同一路线运行不同的功能?
imo 最优雅的方法是不要将相同的 url 用于两件事......我将有一个路径 /stores/all
和另一个路径 /stores/near?lat=...
并将 if 语句放在前端代码以便用户的操作发送适当的请求以上是关于使用搜索参数快速路由 GET的主要内容,如果未能解决你的问题,请参考以下文章