如何自定义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和不扩展也可以轻松实现。