2

因此,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事后或干扰解析过程。我想学后者。

4

3 回答 3

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 并且无需扩展也可以轻松实现相同的目标。

于 2015-03-12T03:27:18.083 回答
0

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

于 2012-09-20T21:11:49.037 回答
0

查询字符串在此处解析connect-query.js,它基于 tj 的查询字符串解析器节点查询字符串,您可能想要查看它或节点查询字符串解析器。AFAIK 如果不分叉 express 并在其中更改某些内容,您就无法更改 qs 解析。无论如何,在中间件中或稍后在您的应用程序中处理这种情况,您需要将字符串作为数字,而不是在每个请求中检查数字,性能会更好。

于 2012-09-20T20:44:15.387 回答