NodeJS:在对象到客户端内部发生故障的阵列

时间:2015-06-12 06:23:39

标签: javascript arrays node.js object

尝试在数据对象内部跟踪客户端套接字。

var clients = {'clients':[]};

io.sockets.on('connection', function(socket) {
    clients.clients.push(socket);
    io.emit('updateUsers', clients);
});

获取此错误: RangeError:超出最大调用堆栈大小。

我认为让客户端成为对象而不是数组会解决调用堆栈错误,但我猜错了...不确定我在这里忽略了什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

您已将socket对象放入要发出的数据中,clients

clients.clients.push(socket);

socket对象是一个复杂的结构,可能包含循环引用。

io.emit的工作方式是首先通过执行JSON.stringify(clients)将需要发送的数据转换为JSON字符串。现在JSON.stringify无法处理可能具有循环引用的对象。所以that's the cause of your error.

你不应该把像socket那样复杂的东西放到你想要发出的数据中。您应该只发出最重要的信息。如果您只想发出socket.id,那么您应该推送

clients.clients.push({id: socket.id})

..或其他此类信息,但保留一个可以转换为JSON字符串的简单对象。