2012-08-16 23 views
6

estoy enviando un credenciales objeto JSON con la siguiente petición a Node.js:Node.js analizan JSON de solicitud

credentials = new Object(); 
credentials.username = username; 
credentials.password = password; 

$.ajax({ 
    type: 'POST', 
    url: 'door.validate', 
    data: credentials, 
    dataType: 'json', 
    complete: function(validationResponse) { 
     ... 
    } 
}); 

En el lado del servidor me gustaría cargar las credenciales presentadas en un objeto JSON para utilizarlo más adelante ..

sin embargo, no sé cómo obtener el JSON del objeto req ...

http.createServer(
    function (req, res) { 
     // How do i acess the JSON 
     // credentials object here? 
    } 
).listen(80); 

(tengo un despachador en mi función (req, res) pasando la solicitud más adelante a los controladores, por lo que no me gustaría utilizar la función .on ('datos', ...))

Respuesta

16

En el lado del servidor, recibirá los datos jQuery como parámetros de solicitud, no JSON. Si envía datos en formato JSON, recibirá JSON y tendrá que analizarlo. Algo así como:

$.ajax({ 
    type: 'GET', 
    url: 'door.validate', 
    data: { 
     jsonData: "{ \"foo\": \"bar\", \"foo2\": 3 }" 
     // or jsonData: JSON.stringify(credentials) (newest browsers only) 
    }, 
    dataType: 'json', 
    complete: function(validationResponse) { 
     ... 
    } 
}); 

del lado del servidor que va a hacer:

var url = require("url"); 
var queryString = require("querystring"); 

http.createServer(
    function (req, res) { 

     // parses the request url 
     var theUrl = url.parse(req.url); 

     // gets the query part of the URL and parses it creating an object 
     var queryObj = queryString.parse(theUrl.query); 

     // queryObj will contain the data of the query as an object 
     // and jsonData will be a property of it 
     // so, using JSON.parse will parse the jsonData to create an object 
     var obj = JSON.parse(queryObj.jsonData); 

     // as the object is created, the live below will print "bar" 
     console.log(obj.foo); 

    } 
).listen(80); 

Tenga en cuenta que esto funcionará con GET. Para obtener los datos POST, echar un vistazo aquí: How do you extract POST data in Node.js?

para serializar el objeto en JSON y establecer el valor en jsonData, puede utilizar JSON.stringify(credentials) (en los navegadores más nuevos) o JSON-js. Ejemplos aquí: Serializing to JSON in jQuery

+1

tahnk you david que fue muy útil. resolvió mi problema – ndrizza

+0

@ndrizza: ¡De nada! – davidbuzatto

+1

Tenga en cuenta que podría funcionar en GET en algún momento. Si los datos serializados enviados al método GET se vuelven demasiado grandes, es posible que se trunquen, lo que da como resultado un json no válido en el lado del servidor. –

-3

CONSOLE.LOG el req

http.createServer(
    function (req, res) { 

    console.log(req); // will output the contents of the req 

    } 
).listen(80); 

Los datos post será en algún lugar si era enviado exitosamente.

+0

gracias, lo imprimí y no había datos. ¿tienes una idea de por qué? – ndrizza

+0

lo descubrí, tuve que usar JSON.stringify (credenciales) en la solicitud POST ajax. – ndrizza