[英]Express request body for post is undefined
我的app.js中有以下设置:
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var router = express.Router();
require('./routes/index')(router);
app.use(router);
在我的routes/index.js中,我定义了所有路线:
module.exports = function (router) {
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Home' });
});
router.post('/', function(req, res, next) {
console.log(req.body);
});
}
然后在我的应用程序入口点bin/server.js中:
var app = require('../app');
var debug = require('debug')('NodeJSDemo:server');
var http = require('http');
var port = 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
当我使用请求正文在http://localhost:3000/上进行 POST 调用时,在控制台日志中未定义控制台日志请求正文。
我的设置有什么问题吗? 从这篇文章Express.js req.body undefined看来只要我打电话
app.use(bodyParser.json())
在加载路线之前,它应该没问题,但似乎没有。
问题出在您在POST请求中发送的资源类型。
您的bodyParser.json()
仅解析json格式。 或者换句话说,如果您只是简单地发布一个在大多数情况下默认为application/x-www-form-urlencoded
的简单表单,您将不会获得 body 对象。
正如文档中所述:
返回仅解析 json 且仅查看 Content-Type 标头与类型选项匹配的请求的中间件。
和
type - type 选项用于确定中间件将解析的媒体类型。 默认为应用程序/json。
解决方案是实施和收集其他场景,因此:
应用程序/x-www-form-urlencoded
app.use(bodyParser.urlencoded())
多部分/表单数据
如文档中所述,Express 不会解析多部分正文:
这不处理多部分主体,因为它们复杂且通常很大。 对于多部分主体,您可能对以下模块感兴趣:
- busboy和connect-busboy
- 多方和连接多方
- 强大
- 多个
您不能包含 bodyParser 依赖项。 并使用 express 内置方法:
express.json()
express.text()
express.urlencoded()
它们是基于 bodyParser 模块构建的,因此调用bodyParser.json()
。 你会做express.json()
并获得相同的结果。
资料来源: https ://expressjs.com/en/resources/middleware/body-parser.html#bodyparserurlencodedoptions
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.