2012-08-16 19 views
6

ich mit der folgenden Anforderung an node.js ein Anmeldeinformationen JSON-Objekt schicke:node.js analysieren JSON der Anfrage

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

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

Auf der Serverseite möchte ich die eingereichten Anmeldeinformationen in ein JSON-Objekt laden verwenden sie es weiter ..

aber ich weiß nicht, wie die JSON, um aus dem erf Objekt ...

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

(i in meiner Funktion einen Dispatcher haben (req, res) Weiterleiten der Anforderung weiter In dem Controller, so möchte ich nicht die .on verwenden (‚Daten‘, ...) Funktion)

Antwort

16

Auf der Serverseite erhalten Sie die jQuery-Daten als Anfrageparameter, nicht JSON. Wenn Sie Daten im JSON-Format senden, erhalten Sie JSON und müssen es analysieren. Etwas wie:

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

Auf Server-Seite werden Sie tun:

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

Beachten Sie, dass diese mit GET funktioniert. Um die POST-Daten zu erhalten, nehmen Sie einen Blick hier: How do you extract POST data in Node.js?

zu Ihrem Objekt JSON serialisiert und den Wert in jsonData einstellen, können Sie JSON.stringify(credentials) (in neuestem Browser) oder JSON-js verwenden. Beispiele hier: Serializing to JSON in jQuery

+1

tahnk du David, das war sehr nützlich. es hat mein Problem gelöst. – ndrizza

+0

@ndrizza: Gern geschehen! – davidbuzatto

+1

Beachten Sie, dass es in GET irgendwann funktioniert. Wenn die serialisierten Daten, die an die GET-Methode gesendet werden, zu groß werden, werden sie möglicherweise abgeschnitten, was zu einem ungültigen json auf der Serverseite führt. –

-3

console.log die erf

http.createServer(
    function (req, res) { 

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

    } 
).listen(80); 

Die Post-Daten irgendwo da sein werden, wenn es erfolgreich gesendet.

+0

danke, ich druckte es und es gab keine Daten. Hast du eine Idee warum? – ndrizza

+0

fand es heraus, musste JSON.stringify (credentials) in der POST Ajax Anfrage verwenden. – ndrizza