我正在从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);
});
但没有任何内容记录到控制台。
非常感谢任何帮助。提前谢谢。
答案 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();
});
我在所有需求之后使用了这段代码。 这应该是第一个可以工作的中间件。我希望它可以帮助像我这样的人。