因此,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或干扰解析过程。我想学习后者。
答案 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可以很容易地实现同样的功能,而且没有扩展名。