2016-03-05 106 views
0

我在製作一個簡單的應用程序來學習node.js的工作原理。使用jquery和ajax,我將一個JSON對象傳遞給一個node.js方法。問題是我不知道如何獲取node.js方法中的特定JSON數據。使用node.js獲取JSON對象

客戶端代碼:

 $(document).ready(function(){ 

     $('#guardarVehiculo').click(function(){ 
      var car = JSON.stringify(agregarCarro()); 
      $.ajax({ 
       type: 'POST', 
       data: car, 
       url: '/saveCar', 
       dataType: 'JSON' 
      }).done(function(response) { 
       console.log(response); 
      }); 
     }); 

    }); 

    function addCar(){ 
     var id = getById('id').value; 
     var brand = getById('brand').value; 
     var model = getById('model').value; 
     var transmission = getById('automatic').checked ? getById('automatico').value : getById('mechanic').value; 
     var comment = getById('comment').value; 

     var car = new Car(id, brand, model, transmission, comment); 

     return car; 

    } 

的node.js代碼:

var express = require('express'); 
var fs = require('fs'); 
var app = express(); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + "/index.html"); 
}); 

app.post('/saveCar', function(req, res){ 
    console.log(req); 
}); 

var server = app.listen(8000, function(){ 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Server running at: ' + host + ':' + port); 
}); 

預先感謝。

+1

如果你要發佈的數據,你可能會想要一個BodyParser,這是否給你,否則GET數據很容易在'req.query'中獲得 – adeneo

+0

感謝您的建議,現在我知道如何使用un每種情況。 – DCruz22

回答

3

您可以使用bodyParser中間件

var app = express(); 
var bodyParser = require("body-parser"); 
app.use(bodyParser.json()); 

然後req.body將包含解析的JSON對象:

app.post('/saveCar', function(req, res) { 
    console.log(req.body); 
}); 

這裏有一個疑難雜症。您需要設置正確的Content-Type頭使得AJAX調用時使身體解析器知道它應該處理JSON:

.ajax({ 
    type: 'POST', 
    data: car, 
    url: '/saveCar', 
    contentType: 'application/json', 
    dataType: 'JSON' 
}).done(function(response) { 
    console.log(response); 
}); 
+0

我正在找那個。非常感謝! – DCruz22

1

回答瞭解流動。

JSON客戶發佈的數據在req.body收到。

req.body包含在請求正文中提交的鍵值對數據。默認情況下,它是未定義的,並在您使用身體分析中間件(如body-parser)時填充。

用身體解析中間件來填充req.body爲:

var app = express(); 
var bodyParser = require("body-parser"); 
app.use(bodyParser.json()); 

魔術req.body意志服務器JSON數據,通過客戶端發送:

app.post('/save-car', function(req, res) { 
    //hey! i am req.body and i have all data :) 
}); 
+0

感謝您的解釋! – DCruz22

0

使用BodyParser模塊。

服務器:

var bodyParser = require("body-parser"); 
app.use(bodyParser.json()); 

路線:

cars{ 
    brand: "Tesla", 
    model: "S-sport", 
    color: "white" 
} 

app.post('/saveCar', function (req, res) { 
    console.log(req.body); 
    //to response back as Json. 
    res.json(cars); 
});