有时我在通过 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 引发异常,而只是截断它们或将它们转换为null
或NaN
。 而且,在任何一种情况下,您的代码都需要使用.id_str
,而不是.id
。