Error al enviar una matriz en Node.js y Socket.io
-
28-10-2019 - |
Pregunta
Yo uso Socket.io versión 0.8.4
He reducido mi problema a lo siguiente. Tengo datos como esto:
data.prop1 = [];
data.prop1.push("man");
data.prop2 = [];
data.prop2["hey"] = "man";
Envío los datos del servidor al cliente de esta manera:
socket.emit("data", data);
En el lado del cliente recibo los datos de esta manera:
socket.on("data", function(data){ console.log(data); });
Lo extraño es:
data.prop1 = [];
data.prop1.push("man"); // This data exists in the client side data object
data.prop2 = [];
data.prop2["hey"] = "man"; // This data does not exist.
data.prop2 es solo una matriz vacía en el lado del cliente.
¿Existe un error conocido en las matrices de serialización de JSON en el formulario en PROP2?
Gracias de antemano
EDITAR:
Problema resuelto con esta solución:
data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // <= Object instead of array
data.prop2["hey"] = "man";
Solución
ECMA-262 sobre JSON.stringify
:
La representación de matrices incluye solo los elementos entre cero y
array.length – 1
inclusivo. Las propiedades nombradas se excluyen de la Ctringificación.
Se supone que las matrices tienen nombres de propiedades numéricas. Entonces cuando el data.prop2
se transforma en JSON (que Socket.io envía los datos, imagino), no obtiene el 'hey'
propiedad. Si desea usar nombres de propiedad no numéricos, debe usar objetos en lugar de matrices:
data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // Notice we're creating an object, not an array.
data.prop2["hey"] = "man"; // Alternatively: data.prop2.hey = "man"
Otros consejos
Desafortunadamente, JavaScript realmente no funciona así.
Verificar Este artículo, aproximadamente a la mitad. Explica el problema en el que intenta establecer data.prop2 ["hey"] = "hombre";