2016-02-09 31 views
1

我從我的AngularJS客戶端發送一些JSON對象到我的NodeJS服務器。請求不顯示身體分析器的數據

這是我的客戶端代碼發出POST請求。

customerData.endPoint = "customers"; 
$http.post('https://woocommerce-api-samarthagarwal-1.c9users.io/api', customerData) 
    .then(function(response){ 
      console.log(response) 
     }); 

這是我的服務器代碼。

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

var urlParser = bodyParser.urlencoded({ extended: true}); 
var jsonParser = bodyParser.json(); 

app.post('/api', jsonParser, function(request, response){ 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    console.log("body " + JSON.stringify(request.body)); 
    var endPoint = request.body.endPoint; 
    console.log("POST on " + endPoint + " with Data " + (request.body.customer)); 
    }); 


var port = process.env.PORT; 
var ip = process.env.IP 
app.listen(port, ip, function() { 
    console.log('Server listening on ' + ip +':' + port); 
}); 

但沒有任何內容記錄到控制檯。

Console

任何幫助,高度讚賞。提前致謝。

+1

你可以登錄request.headers嗎?看起來你沒有得到Content-Type:application/json,它可以防止bodyParser.json分析請求 – aaaristo

+0

我在請求頭日誌中得到''content-type':'text/plain; charset = UTF-8'。 –

+0

將該請求標頭設置爲Angular端的'「application/json」'。這是告訴您的服務器(即解析器)它發送的是JSON負載。 – danneu

回答

1

我不得不手動設置頭用於使用中間件的每個請求。

app.use(function(req, res, next) { 
    req.headers['content-type'] = "application/json"; 
    next(); 
}); 

我使用此代碼後,所有的要求。 這應該是第一個工作的中間件。我希望它能幫助像我這樣的人。

1

您需要註冊bodyParser作爲中間件,否則它不會知道如何解析正文。這個中間件需要在任何路由被定義之前。

如果沒有註冊bodyParser作爲中間件,您的request.body將始終爲{}。因此,在執行request.body.customer時,值將爲undefined,並且您的整個console.log()語句將不會打印到控制檯。

Example of body-parser usage from docs

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

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true}); 

app.post('/api', function(req, res){ 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    console.log("body " + JSON.stringify(req.body, null, 2)); 
    var endPoint = req.body.endPoint; 
    console.log("POST on " + endPoint + " with Data " + (req.body.customer)); 
}); 


var port = process.env.PORT; 
var ip = process.env.IP 
app.listen(port, ip, function() { 
    console.log('Server listening on ' + ip +':' + port); 
}); 
+0

仍然獲取控制檯日誌相同的截圖。 –

+0

這是如何使用'body-parser',所以確保它實際安裝正確,'npm install --save body-parser' – peteb

+0

我重新安裝並更新了你的代碼。仍在爲'JSON.stringify(request.body)'獲得'{}''。 –