2012-08-16 1 views
6

io mando un credenziali JSON oggetto con la seguente richiesta al node.js:node.js analizzare JSON di richiesta

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

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

Sul lato server vorrei caricare le credenziali presentate in un oggetto JSON per usarlo più avanti ..

Tuttavia, non so come ottenere il JSON fuori dell'oggetto req ...

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

(ho un dispatcher nella mia funzione (req, res) passando il req più avanti ai controller, in modo che io non vorrei usare il .on ('dati', ...) Funzione)

risposta

16

Sul server si riceveranno i dati jQuery come parametri di richiesta, non JSON. Se si inviano dati in formato JSON, si riceverà JSON e sarà necessario analizzarlo. Qualcosa di simile:

$.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) { 
     ... 
    } 
}); 

Al lato server si farà:

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); 

Si noti che questo funzionerà con GET. Per ottenere i dati POST, date un'occhiata qui: How do you extract POST data in Node.js?

per serializzare l'oggetto di JSON e impostare il valore a jsonData, è possibile utilizzare JSON.stringify(credentials) (in nuovi browser) oppure JSON-js. Esempi: Serializing to JSON in jQuery

+1

tahnk you david che è stato molto utile. ha risolto il mio problema. – ndrizza

+0

@ndrizza: prego! – davidbuzatto

+1

Si noti che potrebbe funzionare in GET ad un certo punto. Se i dati serializzati inviati al metodo GET diventano troppo grandi, potrebbero essere troncati con conseguente json non valido sul lato server. –

-3

console.log il req

http.createServer(
    function (req, res) { 

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

    } 
).listen(80); 

I dati post sarà lì da qualche parte, se fosse inviato con successo.

+0

grazie, l'ho stampato e non c'erano dati. hai un'idea del perché? – ndrizza

+0

lo ha scoperto, ha dovuto usare JSON.stringify (credenziali) nella richiesta ajax POST. – ndrizza