请求不显示带有正文解析器的数据

request not showing data with 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);
});

但是没有任何内容记录到控制台。

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

您需要将 bodyParser 注册为 express 的中间件,否则它将不知道如何解析正文。这个中间件需要在定义任何路由之前出现。

如果不将 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);
});

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

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

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