【问题标题】:string query params getting converted to array字符串查询参数被转换为数组
【发布时间】:2021-10-21 15:29:35
【问题描述】:

我在某些 nodejs 服务器中遇到问题,其中字符串查询参数被解析为数组而不是保存为字符串。所以像 https://somedomain.com/test?first=val&token=secret 这样的东西会在 nodejs 服务器上被解析,这样params.first 中的值是['val'] 而不是'val'params.token 中的值是['secret'] 而不是'secret'。不寻常的是,我在不相关的 nodejs 服务器中看到了这一点。一个是在生产中运行的 aws lambda,另一个是本地开发服务器,我在其中使用 express.jsbodyParser。每个都有不同的代码库。过去,由于 qs 包解析数组的方式,我遇到过问题,但这个问题似乎完全不相关,我似乎无法在其他地方找到类似的问题。有谁知道是什么导致了这种行为?谢谢! :)

【问题讨论】:

  • 你用什么来发出请求?
  • @CascadiaJS 当它发生在本地开发服务器上时,我使用的是Firecamp 浏览器扩展。当它发生在 aws lambda 中时,我在 cordova 应用程序中使用 webview。
  • 你有没有办法查看网络流量,比如fiddler?如果这样做,使用的 url 是否有逗号或大括号?喜欢https://somedomain.com/test?first=val,&token=secret,?这将导致它成为一个数组。不过,有很多方法可以最终形成一个数组。这里有一个很好的解释Arrays in query params
  • 谢谢。只需阅读链接的文章,确实其中之一就是问题所在。感谢您的帮助。

标签: node.js aws-lambda query-string body-parser query-parameters


【解决方案1】:

我最终发现问题在于 url 多次具有相同的查询参数,querystring 包通过为每个值创建一个数组来处理这个问题。该软件包已弃用,因此我切换到推荐的 URLSearchParams 替代方案,并修复了 url 中的重复问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2020-11-21
    • 2013-07-11
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多