/ / NodeJS: problem z wysyłaniem tablicy do obiektu do klienta - javascript, tablice, node.js, obiekt

NodeJS: problem z wysyłaniem tablicy wewnątrz obiektu do klienta - javascript, arrays, node.js, object

Próbuję samodzielnie śledzić gniazda klienta w obiekcie danych.

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

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

Otrzymuję ten błąd: RangeError: Przekroczono maksymalny rozmiar stosu wywołań.

Myślałem, że uczynienie klientów obiektami, a nie tablicą, rozwiąże błąd stosu wywołań, ale zgaduję, że się myliłem ... Nie jestem pewien, co tutaj przeoczam.

Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Umieściłeś socket obiekt w danych, które chcesz emitować, clients

clients.clients.push(socket);

socket obiekt jest złożoną strukturą, prawdopodobnie zawierającą odwołania kołowe.

Droga io.emit Działa w ten sposób, że najpierw konwertuje dane potrzebne do przesłania na ciąg JSON JSON.stringify(clients). Teraz JSON.stringify nie może działać na obiektach, które mogą mieć odwołania cykliczne to jest przyczyną twojego błędu.

Nie powinieneś stawiać czegoś tak złożonego jak socket w dane, które i tak chcesz wysłać. Powinieneś emitować tylko najważniejsze informacje. Gdybyś tylko chciał emitować socket.id powinieneś to popchnąć

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

.. lub inne takie informacje, ale zachowując je jako prosty obiekt, który można przekształcić w ciąg JSON.