请求不使用正文解析器显示数据

时间:2016-02-09 17:03:29

标签: angularjs node.js http express body-parser

我正在从AngularJS客户端向我的NodeJS服务器发送一些JSON对象。

这是我的客户端代码发出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

非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

我必须使用中间件为每个请求手动设置标头。

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

我在所有需求之后使用了这段代码。 这应该是第一个可以工作的中间件。我希望它可以帮助像我这样的人。