【问题标题】:Node post request body gets truncated节点发布请求正文被截断
【发布时间】:2019-08-06 06:52:30
【问题描述】:

当尝试使用带有 axios 或 request-promise 的 nodejs 将带有 JSON 正文的 WakeUp event 发布到 Alexa events API 时,API 总是返回错误 500。

我发布到online endpoint 以实际查看发布的内容,并了解到帖子正文被截断,这显然会导致 json 无效。我抽象了这个问题,并尝试使用repl.it从一个原始的nodejs安装中运行它,结果是一样的。

有趣的是,标题和正文的长度之间似乎存在关系。因此,当我缩短标题中的身份验证令牌时,会传输更多的正文字符。如果我将正文中的长标记缩短到大约 450 到 500 个字符(似乎有所不同),整个请求就会通过。显然这不是一个解决方案,因为身份验证需要令牌。

当我尝试使用 axios 版本将其降低到 0.10 时,我曾经得到一个结果,但再次发布导致另一个 500。如果我经常发布足够多的请求,即使在当前的 axios 版本上,也会完成一些请求。我也尝试使用 request-promise 来获得相同的结果。

我觉得我犯了一个非常愚蠢的错误,但我找不到它,我真的找不到关于这个话题的任何东西,所以它让我发疯。任何帮助将不胜感激!

【问题讨论】:

  • 这个问题不应该有一些代码吗?
  • 他已经在repl.it上发布了代码,都在那里..

标签: node.js json post axios request-promise


【解决方案1】:

这看起来很棘手。首先,我不认为你犯了一个非常愚蠢的错误。在我看来,由于某种原因,其中一个低级模块不喜欢 POST 正文中的某些内容(真的很奇怪。).. 我已经玩过这个,我在两个 Axios 上都得到了完全相同的行为和 Request.. 如果我注释掉令牌(correlationToken 和承载令牌)一切正常。

如果我在本地进行测试,一切都会正常运行(例如,设置快速服务器并记录 POST 正文)。

同样发布到https://postman-echo.com/post 可以正常工作(使用原始帖子数据)..

我在这里创建了这个:https://repl.it/repls/YoungPuzzlingMonad

在我看来,对http://posthere.io 的原始请求仅因为请求大小而失败。如果您尝试使用大型 JSON 主体的非常基本的 POST,您会得到相同的结果。

我也得到与superagent 相同的结果。这让我相信这是服务器端的东西...

【讨论】:

  • 谢谢,所以使用 posthere.io 可能会导致误报。使用 superagent 的结果是什么?与 posthere.io 相同的截断正文?
  • 是的,我想是的,这只是令人困惑的原因!我尝试了大多数 http 模块。
【解决方案2】:

这根本与发布请求无关。发送 WakeUp 事件后出错的原因是缺少包含 Alexa.WakeOnLANController 接口中 MACAdresses 的配置参数。 我使用 AlexaResponse 类通过 createPayloadEndpointCapability 添加功能,该功能尚未修改为支持“新”WakeOnLANController 接口。

很遗憾,该发现被接受了,并且我的支持 WOL 的设备已添加到我的智能家居设备中,尽管缺少必需的参数:(

posthere.io 切断长的帖子正文花费了我好几个小时......从好的方面来说,我了解了许多在节点中发出帖子请求的不同方式;)

再次感谢特里的调查!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多