【问题标题】:Express routing GET with search params使用搜索参数快速路由 GET
【发布时间】: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);

【问题讨论】:

    标签: node.js rest express restful-url


    【解决方案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 语句放在前端代码以便用户的操作发送适当的请求
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多