2011-01-03 17 views
12

Tengo el siguiente código, pero no parece funcionar:Node.js - Enviar y recibir matriz como GET/POST usando querystring

var post_req = { 
    array: [ 
     [ { 
      param1: 'something', 
      param2: 123 
     } ], 
     [ ], 
     [ ], 
     [ { 
      param2: 'something', 
      param4: 1234, 
      param1: 'hello' 
     } ] 
    ] 
}; 
var data_send = querystring.stringify(post_req); 

var request = client.request('POST', '/', headers); 
request.end(data_send); 

y

if(req.method == 'POST') { 
    req.addListener('data', function(chunk) 
    { 
     POST = querystring.parse(chunk); 
     console.log(POST); 
    } 
} 

I terminar con 5 sub-matrices, que corresponden a los 5 parámetros de los objetos, pero con '] [' caracteres adicionales en sus nombres:

{ array: 
    [ { '][param1': 'something' } 
    , { '][param2': '123' } 
    , { '][param2': 'something' } 
    , { '][param4': '1234' } 
    , { '][param1': 'hello' } 
    ] 
} 
+0

Parece módulo de cadena de consulta de nodo no fue diseñado para manejar matrices anidadas (posiblemente queridos vacío). Si se trata de una solicitud POST, ¿podría usar JSON.stringify y JSON.parse en su lugar? – RandomEtc

Respuesta

10

Hay un nuevo paquete de nodo que corrige este: "NGP instalar qs".

https://github.com/visionmedia/node-querystring

"consulta analizador de cadena para el nodo de soporte de anidación, ya que fue retirado de 0.3.x, por lo que esta biblioteca proporciona el comportamiento anterior y comúnmente deseada (y dos veces más rápido)"

Si alguien Puede decirme por qué se eliminó de 0.3.x, le daré un voto favorable para su comentario. (Quiero que mi confianza en Node.js restaurada.)

6

para confirmar mi comentario anterior, la función querystring.stringify del nodo no manejará matrices anidadas (en el momento de la escritura).

se puede ver la fuente de stringify en https://github.com/ry/node/blob/master/lib/querystring.js

Nota que maneja un nivel de matrices pero no recursivo. Cuando encuentra una matriz, usa stringifyPrimitive para codificar los valores de la matriz. Puede ver que stringifyPrimitive no maneja matrices, solo números, booleanos y cadenas.

Como sugerí en mi comentario, dado que usted está utilizando una petición POST una mejor idea sería utilizar JSON para su codificación compleja estructura de datos.

O utilice https://github.com/visionmedia/node-querystring según lo sugerido por @FriendlyDev

5

No utilice querystring.parse para volver a crear un objeto JSON enviado como cadena. Use en su lugar JSON.parse. Y use JSON.stringify en lugar de querystring.stringify

querystring es útil cuando envía un parámetro codificado en la url o cuando publica un formulario. Pero no tiene sentido usarlo si envía solo un objeto JSON con todos sus datos.

En su escenario descartaría la biblioteca querystring y usaría la biblioteca JSON, que ya está incluida. Sería más limpio y más rápido.

http://www.json.org/js.html

Cuestiones relacionadas