从包含“&”字符的请求对象获取参数时出错

时间:2015-08-06 08:30:48

标签: node.js express

我试图使用以下代码从请求对象获取param。

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

2 个答案:

答案 0 :(得分:0)

req.query已经是express的对象:

  

包含路由中每个查询字符串参数的属性的对象。如果没有查询字符串,则它是空对象{}。

req.query documentation

答案 1 :(得分:0)

您必须在调用nodejs API之前对您的URL进行编码。在nodejs方面,您必须解码URL以获得正确的参数。