/ / NodeJS: Fehler beim Senden eines Arrays innerhalb des Objekts an den Client - Javascript, Arrays, node.js, Objekt

NodeJS: Probleme beim Aussenden des Arrays innerhalb des Objekts an den Client - Javascript, Arrays, node.js, object

Ich versuche, den Überblick über Client-Sockets innerhalb eines Datenobjekts zu behalten.

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

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

Erhalte diesen Fehler: RangeError: Maximale Call-Stack-Größe überschritten.

Ich dachte, dass Clients eher ein Objekt als ein Array sind, um den Call-Stack-Fehler zu beheben, aber ich schätze, ich habe mich geirrt ... Ich bin mir nicht sicher, was ich hier übersehen habe.

Vielen Dank!

Antworten:

0 für die Antwort № 1

Sie haben die socket Objekt in den Daten, die Sie ausgeben möchten, clients

clients.clients.push(socket);

socket Objekt ist eine komplexe Struktur, die möglicherweise Zirkelverweise enthält.

Der Weg io.emit Das funktioniert nur, wenn zuerst die Daten konvertiert werden, die zum Senden an den JSON-String erforderlich sind JSON.stringify(clients). Jetzt JSON.stringify kann nicht an Objekten arbeiten, die Zirkelverweise haben das ist die ursache deines fehlers.

Sie sollten nicht etwas so Komplexes wie socket in die Daten, die Sie sowieso ausgeben möchten. Sie sollten nur die wichtigsten Informationen ausgeben. Wenn du nur ausstrahlen wolltest socket.id das solltest du einfach pushen

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

.. oder andere solche Informationen, aber es bleibt ein einfaches Objekt, das in eine JSON-Zeichenfolge konvertiert werden kann.