使用搜索参数快速路由 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的主要内容,如果未能解决你的问题,请参考以下文章

在没有立面的流明中验证路由参数

.Net Core009 API参数和复合搜索

.Net Core009 API参数和复合搜索

.Net Core009 API参数和复合搜索

在express中的root之后使用可选参数传递路由控制?

Vertx - 使用 OAuth2 保护路由时缺少 GET 参数