如何自定义express.js url查询参数解析

时间:2012-09-20 20:00:48

标签: javascript node.js express

因此,req.query返回查询参数的哈希值。更好的是,如果参数实际上是一个json对象,那么它会将它解析为相应的json,这很棒。

但是,如何自定义此解析?例如,我希望将某个值解析为数字,而不是字符串。当然,我可以在事实后做它并修改返回的对象。但是,我很有兴趣知道这个过程是否可以定制。

修改

例如,请考虑以下请求:

GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q%5Bqty%5D%5B%24lt%5D=100 

解码它我们得到:

GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q[qty][$lt]=100

现在,express将这些查询参数转换为

req.query = {rowsPerPage: "25", page: "0", q: {qty: {$lt: "100"}}

我的问题是“25”,“0”和“100” - 我希望它们是数字。所以,我可以更改req.query post factum或干扰解析过程。我想学习后者。

3 个答案:

答案 0 :(得分:0)

这里解析查询字符串connect-query.js,它基于tj的查询字符串解析器node-querystring,你可能想查看它或查询节点查询字符串解析器。 AFAIK你不能改变qs解析而不需要表达和改变那里的东西。无论如何在中间件或稍后在你的应用程序中处理这种情况,你需要字符串作为数字将是更好的性能明智,而不是检查每个请求中的数字。

答案 1 :(得分:0)

您应该查看req.query提供的connect中间件。它基于node-querystring

答案 2 :(得分:0)

我就是这样做的(使用CoffeeScript和Lodash):

app.use (req, res, next) ->
  # Ensure all integer parameters are parsed correctly.
  _.each req.query, (value, key) ->
    unless isNaN value
      req.query[key] = _.parseInt value
  next()

使用JavaScript可以很容易地实现同样的功能,而且没有扩展名。