首页 > 解决方案 > 与 express 中的查询字符串的精确路由匹配

问题描述

我有一条路线/addresses返回用户的所有地址。

我需要创建另一个接受过滤器latitudelongitude.

任何人都可以通过与/addresses?lat=23.23&lng=-70.22.

在这种情况下,我必须修改我以前的控制器方法来检查过滤器。

快递可以吗?我可以创建一个与查询字符串完全匹配的不同路由。

就像使用 query params 完成的一样/addresses/:addressId

所以为此它会遇到不同的控制器:

/addresses    AddressController.getAllAddresses()
/addresses?lat=:lat&lng=:lng   AddressController.getAddressByLatLngFilter()

标签: node.jsexpress

解决方案


在第一个路由处理程序中,您可以检查是否存在查询参数,如果存在,则重定向到另一个路由处理程序:

app.get('/addresses', geo.addresses )

并以一种可以推迟到另一种方式的方式定义路由处理程序:

var this_module = module.exports =  {

 "addresses":  function(req, res, next) {
    if (req.query.lat && req.query.lng) {
      return this_module.addresses_by_loc(req,res,next);
    }
    // handle one way...
  },

 "addresses_by_loc": function(req, res, next) {
    // handle another
  }
}

推荐阅读