2014-04-29 76 views
18

我正在嘗試編寫一個簡單的Express應用程序,它可以在發佈請求中接收JSON。以下是我迄今爲止在服務器上:使用Express 4解析Node.js中的JSON發佈請求

var express = require('express'); 
var bodyParser = require('body-parser'); 

var app = express(); 
app.use(bodyParser.json()); 

app.post('/acceptContacts', function(req, res) { 
    'use strict'; 
    console.log(req.body); 
    console.log(req.body.hello); 
    res.send(200); 
}); 

app.listen(8080); 

這裏是我在瀏覽器的客戶端上:

var req = new XMLHttpRequest(); 
req.open('POST', 'http://localhost:8080/acceptContacts?Content-Type=application/json'); 
var obj = {hello:'world'}; 
req.send(JSON.stringify(obj)) 

不過,我收到服務器的控制檯上的輸出如下:

{} 
undefined 

任何人都可以提出原因?

回答

20

如果使用setRequestHeader它將工作:

var req = new XMLHttpRequest(); 
req.open('POST', 'http://localhost:8080/acceptContacts'); 
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
var obj = {hello:'world'}; 
req.send(JSON.stringify(obj)); 
+0

如果你不控制客戶端?如果客戶端沒有設置這個頭,但我知道它發佈了一個JSON正文,有什麼方法可以訪問它? – daltonclaybrook

+1

是的。如果你也使用'app.use(bodyParser.text());',它應該沒有'setRequestHeader'。 – MikeSmithDev