2012-08-16 90 views
6

我送一個憑據JSON對象有如下要求node.js的JSON:node.js的解析請求

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

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

在服務器端,我想提交的證書加載到一個JSON對象進一步上使用它..

不過,我不知道如何獲得JSON出REQ對象...

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

(我有一個調度員在我的功能(REQ,RES)進一步傳遞請求到控制器,所以我不喜歡用。對(「數據」,...)函數)

回答

16

在服務器端,您將收到jQuery數據作爲請求參數,而不是JSON。如果您以JSON格式發送數據,您將收到JSON並需要解析它。喜歡的東西:

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

在服務器端,你會做什麼:

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

注意,這將有找到工作。要獲得POST數據,看看這裏:How do you extract POST data in Node.js?

要序列化你的對象,以JSON和設置在jsonData值,你可以使用JSON.stringify(credentials)(在最新的瀏覽器),或者JSON-js。這裏的例子:Serializing to JSON in jQuery

+1

tahnk你大衛,這是非常有用的。它解決了我的問題。 – ndrizza 2012-08-16 21:54:39

+0

@ndrizza:不客氣! – davidbuzatto 2012-08-17 01:48:32

+1

請注意,它可能在某些時候在GET中工作。如果發送到GET方法的序列化數據變得太大,它可能會被截斷,導致服務器端無效的json。 – 2013-05-18 23:05:10

-3

CONSOLE.LOG的REQ

http.createServer(
    function (req, res) { 

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

    } 
).listen(80); 

POST數據將在那裏的某個地方,如果它是成功發送。

+0

謝謝,我打印它,並沒有數據。你有一個想法,爲什麼? – ndrizza 2012-08-16 20:33:41

+0

發現它,不得不在POST ajax請求中使用JSON.stringify(憑證)。 – ndrizza 2012-08-16 20:54:30