【发布时间】:2015-08-06 18:02:28
【问题描述】:
我正在尝试使用以下代码从请求对象中获取参数。
module.exports = function (req, res) {
var query = req.query;
var data = JSON.parse(query.param1);
}
这在大多数情况下都可以正常工作。
如果param1 包含& 字符,则query.param1 在& 之前获取值,并且下一个值被视为新的param。
例如
localhost/?param1={"url":"http://s.test.com/x?format=jsonp&id=a&callback=b"}
编辑原来的网址已经是encoded
localhost/?param1=%7B%22url%22%3A%22http%3A%2F%2Fs.test.com%2Fx%3Fformat%3Djsonp%26id%3Da%26callback%3Db%22%7D
在这种情况下,我得到param1 = {"url":"http://s.test.com/x?format=jsonp
这是无效的json,所以我遇到了错误,目前我们已经使用正则表达式解决了它(删除了网址的localhost/?param1= 部分)。
处理这个用例的最佳方法是什么?
编辑:服务器环境
centos 6.5 server
node v0.12.7
express@4.13.3
【问题讨论】:
-
我无法用
express@4.13.3重现这个(尝试了simple和extended查询解析器)。 -
@robertklep using
express@4.13.3仍然报错,所以 express 版本没有问题,请检查其他服务器环境的编辑问题 -
这是一个gist,里面有我用来测试的代码。
-
@robertklep 是的,我提供的网址正在工作。但我的实际网址比这个网址复杂,我怀疑
&字符,我会再次编辑问题。