2016-03-05 109 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); 
});