【问题标题】:Node Express - How to support encoded url query stringNode Express - 如何支持编码的 url 查询字符串
【发布时间】:2016-10-27 18:04:47
【问题描述】:

使用node v6.2.0,表达4.14.0。

当输入站点网址为:'http://site.name/?key=value'时,我可以通过以下方式获取查询值:

app.get('/', function (req, res) { 
  // req.query.key equals 'value'
});

但是当输入编码后的 url: 'http://site.name/?key%3Dvalue' 时,req.query 对象看起来像这样:

{ 'key%3Dvalue' : '' }

有没有办法让节点 req.query 正确解析 url? 如果否,提取此查询值的首选方法是什么?

【问题讨论】:

  • 它正在正确解析它。将= 编码为%3D 的全部意义在于,它将被视为 data 而不是将键与值分开的字符。否则将无法提交= 符号。
  • 如果“=”是分隔符而不是值本身的一部分,则不必编码。

标签: node.js express


【解决方案1】:

根据 cmets 的理解,解析是正确的,它不应该将 %3D 解码为键分隔符。

在这种情况下,已经有客户端尝试到达编码 URL 中的地址(由于客户端错误)。 所以我在服务器上添加了一个临时处理程序来将 '%3D' 解析为 '='。

const value = req.query.key ||
    url.parse(req.url.replace('%3D', '='), true).query.key;

当客户端推出带有修复的新版本时,我可以从服务器中删除此处理程序并仅使用 req.query.key 应该是。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多