如何自定义express.js url查询参数parsing
所以, req.query返回查询参数的散列。 更妙的是,如果一个参数实际上是一个json对象,那么它将它parsing到各自的json中,这真是太棒了。
但是,我怎样才能定制这个parsing? 例如,我想要一个特定的值被parsing为一个数字,而不是一个string。 当然,我可以做到事后和修改返回的对象。 但是,我很有兴趣知道该过程是否可以定制。
编辑
例如,请考虑以下请求:
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
现在,将这些查询参数转换为
req.query = {rowsPerPage: "25", page: "0", q: {qty: {$lt: "100"}}
我的问题是“25”,“0”和“100” – 我希望它们是数字。 所以,我可以改变req.query
post req.query
或干扰parsing过程。 我想学习后者。
你应该看看connect提供的req.query中间件。 它基于节点查询string 。
查询string在这里parsingconnect-query.js ,它基于tj的查询stringparsing器节点查询string,你可能想要查看或查看节点查询stringparsing器。 AFAIK你不能改变qsparsing而不分叉expression和改变那里的东西。 无论如何在中间件中处理这种情况,或者稍后在你的应用程序中,你需要string是数字将是更好的性能而不是检查每个请求中的数字。
这是我怎么做(使用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和不扩展也可以轻松实现。