邮件的快速请求正文未定义

时间:2016-01-01 21:15:18

标签: javascript node.js express

我在 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())

在加载路线之前,它应该没问题,但似乎没有。

1 个答案:

答案 0 :(得分:0)

问题来自于您在 POST 请求中发送的资源类型。

您的bodyParser.json()仅解析 json 格式。换句话说,如果您简单地发布一个简单的 form ,大多数情况下默认为application/x-www-form-urlencoded,您将不会获得body对象。

如文档中所述:

返回仅解析json并且仅查看请求的中间件 Content-Type标头与type选项匹配。

type -类型选项用于确定中间件是哪种媒体类型 将解析。 默认为 application / json。

解决方案是在其他情况下实施和收集:

应用程序/ x-www-form-urlencoded

app.use(bodyParser.urlencoded())

多部分/表单数据

Express不会按文档中所述解析多部分主体:

由于多部分实体的复杂性和 通常是大自然。对于多部分实体,您可能会感兴趣 以下模块:

  1. busboy connect-busboy
  2. 多方连接多方
  3. 好看的
  4. multer

对于Express版本:+4.17.0

您不能包含bodyParser依赖项。并将快速内置方法用作:

express.json()   
express.text() 
express.urlencoded()

它们是基于bodyParser模块构建的,因此可以调用bodyParser.json()。您将做express.json()并获得相同的结果。

来源: https://expressjs.com/en/resources/middleware/body-parser.html#bodyparserurlencodedoptions