2016-02-09 3 views
1

Я отправляю объект JSON от моего клиента AngularJS к моему серверу NodeJS.запрос не показывать данные с помощью body-parser

Вот мой код клиента, выполняющий запрос 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

можете ли вы регистрировать запрос.headers? Похоже, вы не получаете Content-Type: application/json, который запрещает bodyParser.json анализировать запрос – aaaristo

+0

Я получаю '' content-type ':' text/plain; charset = UTF-8'' в журнале заголовков запросов. –

+0

Установите этот заголовок запроса на '' 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)'. –