Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用搜索参数快速获取路由_Node.js_Rest_Express_Restful Url - Fatal编程技术网

Node.js 使用搜索参数快速获取路由

Node.js 使用搜索参数快速获取路由,node.js,rest,express,restful-url,Node.js,Rest,Express,Restful Url,我有两条获取商店的路径,但一条是获取所有商店的路径,另一条是获取附近商店的路径 1) 获取所有存储的url请求如下所示: http://mydomain/stores 2) 获取附近所有商店的url: http://mydomain/stores?lat={lat}&lng={lng}&radius={radius} 问题是: 如何在Express中正确映射这些URL,以将每个路由重定向到相应的方法 app.get('/stores', store.getAll); app

我有两条获取商店的路径,但一条是获取所有商店的路径,另一条是获取附近商店的路径

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);
编辑-第二种方法:

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为零,这将失败,因为这是错误的;如果这是一个问题,您可以显式地针对
未定义的
进行测试,我的想法是避免使用if,但是,如果没有其他方法,就可以了!我发布了另一种方法,但是为什么你希望在没有
if
的情况下,能够根据不同的情况为同一条路线运行不同的功能呢?我认为最优雅的方法是不要在两件事上使用相同的url。。。我将有一个路径
/stores/all
和另一个路径
/stores/near?lat=…
,并将if语句放在前端代码中,以便用户的操作发送适当的请求
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)