Express 4,正文解析器和路由器
Express 4, Body Parser and Router
我将 Express 4 与 Body Parser 一起使用,这样我就可以解析随每个请求发送的不同 JSON 有效载荷。我试图将关注点与我的不同路由器分开,但在 express 4 中使用了新的路由对象。但是,即使我正在发送 application/json 有效负载,post 中的 req.body 对象仍然解析为空.
这是一段代码来展示我想要实现的目标
//Setup
var compression = require('compression'); //gzip
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(compression());
// configure app to use bodyParser()
// this will let us get response data from a POST
var json_body_parser = bodyParser.json();
var urlencoded_body_parser = bodyParser.urlencoded({ extended: true });
app.use(json_body_parser);
app.use(urlencoded_body_parser);
var port = process.env.PORT || 8081;
var router = express.Router();
router.use(function(req, res, next) {
// log each request to the console
console.log(req.method, req.url);
next();
});
router.route('/test')
.get(function(req, res) { //Get All
//do some stuff get stuff
})
.post(function(req, res) { //Create
console.log(JSON.stringify(req.body)); //Empty ???
res.json({ "message": "yeah!" });
//Do some post stuff
});
app.use('/api', router);
app.listen(port);
console.log('Magic happens on port ' + port);
示例 Post 使用 PostMan
POST /api/test HTTP/1.1
Host: localhost:8081
Accept: application/json
Cache-Control: no-cache
{ "data":"4edd40c86762e0fb12000013" }
如何获取 POST 请求中的请求正文?
这是 post 请求的内容类型问题。它应该设置为 Content-Type - application/json。我确认是这个原因。
我将 Express 4 与 Body Parser 一起使用,这样我就可以解析随每个请求发送的不同 JSON 有效载荷。我试图将关注点与我的不同路由器分开,但在 express 4 中使用了新的路由对象。但是,即使我正在发送 application/json 有效负载,post 中的 req.body 对象仍然解析为空. 这是一段代码来展示我想要实现的目标
//Setup
var compression = require('compression'); //gzip
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(compression());
// configure app to use bodyParser()
// this will let us get response data from a POST
var json_body_parser = bodyParser.json();
var urlencoded_body_parser = bodyParser.urlencoded({ extended: true });
app.use(json_body_parser);
app.use(urlencoded_body_parser);
var port = process.env.PORT || 8081;
var router = express.Router();
router.use(function(req, res, next) {
// log each request to the console
console.log(req.method, req.url);
next();
});
router.route('/test')
.get(function(req, res) { //Get All
//do some stuff get stuff
})
.post(function(req, res) { //Create
console.log(JSON.stringify(req.body)); //Empty ???
res.json({ "message": "yeah!" });
//Do some post stuff
});
app.use('/api', router);
app.listen(port);
console.log('Magic happens on port ' + port);
示例 Post 使用 PostMan
POST /api/test HTTP/1.1
Host: localhost:8081
Accept: application/json
Cache-Control: no-cache
{ "data":"4edd40c86762e0fb12000013" }
如何获取 POST 请求中的请求正文?
这是 post 请求的内容类型问题。它应该设置为 Content-Type - application/json。我确认是这个原因。