【问题标题】:Error while getting parameters from request object containing `&` character从包含`&`字符的请求对象获取参数时出错
【发布时间】: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 重现这个(尝试了simpleextended 查询解析器)。
  • @robertklep using express@4.13.3 仍然报错,所以 express 版本没有问题,请检查其他服务器环境的编辑问题
  • 这是一个gist,里面有我用来测试的代码。
  • @robertklep 是的,我提供的网址正在工作。但我的实际网址比这个网址复杂,我怀疑& 字符,我会再次编辑问题。

标签: node.js express


【解决方案1】:

req.query 已经是一个带有 express 的对象:

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

req.query documentation

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 原始网址已编码,请检查已编辑的问题
    猜你喜欢
    • 2010-12-07
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多