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

时间:2017-08-21 12:44:08

标签: javascript socket.io socket.io-redis

有时我通过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有效负载是否太大了?如果是,那么如何约束有效载荷呢?

1 个答案:

答案 0 :(得分:1)

Javasvcript中的最大安全整数是:

9007199254740991

您的JSON包含如下整数:

899068272867328000

超出限制。

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

如果此数据来自Twitter,请在Twitter的开发文档Twitter IDs中讨论该问题。注意,JSON结构提供id_str作为替代,它确实是一个字符串。

而且,根据那篇文章,你需要在解析它之前预处理JSON以删除id值,否则你需要得到一个不会抛出这些长id的异常的解析器,而是只需将其截断或将其转换为nullNaN即可。而且,在任何一种情况下,您的代码都需要使用.id_str,而不是.id