未处理的拒绝错误:整数不安全



有时我在通过 socket.io 2.0 发送 JSON 数据时收到错误"未处理的拒绝错误:整数不安全"。下面是发送导致此类错误的推文对象的示例。

示例代码: https://gist.github.com/whoisstan/dcba1471094b984514c436fd395364e2

我在节点 6.11.2 上使用这些包:

  • "redis": "^2.8.0",
  • "socket.io": "~2.0",
  • "socket.io-redis": "^5.1.0">

JSON 有效负载是否太大?如果是,如何限制有效载荷?

Javasvcript 中的最大安全整数为:

9007199254740991

您的 JSON 包含如下整数:

899068272867328000

超过限制。

实际上不需要用作数字的东西(其中一个大数字被标记为"id",也许可以只用作字符串而不是数字,因此将它们作为字符串而不是数字放入 JSON 中。

如果这些数据来自Twitter,那么这里是Twitter开发文档中对该问题的讨论:Twitter ID。 请注意,JSON 结构提供了id_str作为替代方案,它确实是一个字符串。

而且,根据该文章,您要么需要在解析 JSON 之前对其进行预处理以删除id值,要么需要获取一个解析器,该解析器不会使用这些长 id 引发异常,而只是截断它们或将它们转换为nullNaN。 而且,在任何一种情况下,您的代码都需要使用.id_str,而不是.id

最新更新