Node.js 在express 4.x中,请求主体未定义

Node.js 在express 4.x中,请求主体未定义,node.js,express,Node.js,Express,我刚从3.x迁移到express.js 4.8.7。 我在Express4.x中遇到错误,“req.body”未定义 当我搜索它的时候。我发现,我必须安装“body parser”模块。即使在安装了“body parser”模块之后,我仍然没有定义“req.body”。 我不确定我需要做什么。下面是我的app.js代码 var express = require('express') , path = require('path') , redis = require("redis") , mo

我刚从3.x迁移到express.js 4.8.7。 我在Express4.x中遇到错误,“req.body”未定义

当我搜索它的时候。我发现,我必须安装“body parser”模块。即使在安装了“body parser”模块之后,我仍然没有定义“req.body”。 我不确定我需要做什么。下面是我的app.js代码

var express = require('express')
, path = require('path')
, redis = require("redis")
, mongoose = require('mongoose')
, favicon = require('serve-favicon')
, compression = require('compression')
, bodyParser = require('body-parser')
, methodOverride = require('method-override')
, errorHandler = require('errorhandler')
, cookieParser = require('cookie-parser')
, morgan  = require('morgan')
, multer  = require('multer')
, session = require('express-session');

var app = express();
var router = express.Router();
router.use(function(req, res, next) {
  console.log('%s %s %s', req.method, req.url, req.path);
  next();
});
var routes = require('./routes')(app);



mongoose.connect('mongodb://localhost/abc');

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(favicon(__dirname + '/public/img/favicon.ico'));
app.use(morgan('dev'));
app.use(methodOverride());
app.use(session({resave: true, saveUninitialized: true, secret: 'uwotm8'}));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(multer({ dest: './uploads/'}));
app.use(methodOverride('X-HTTP-Method'));
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(methodOverride('X-Method-Override'));
app.use(compression({'threshold': 512}));

app.use(express.static(path.join(__dirname, 'public')));

if ('development' == app.get('env')) {
  app.use(errorHandler());
}
app.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
我的路由器回调函数发生错误

app.route('/xhr/abc').post(function (req, res) {
    if (req.xhr) {
        var language = req.headers["accept-language"];
...
        var reqBody = req.body;
...
}

您需要确保您的路由位于包含的中间件之后,因为中间件/路由/等在Express 4中是按顺序执行的。

请仅将问题标记到相关代码,并且请学会仅发布相关代码。仅当“正文分析”失败时才显示该方法。请查找已编辑的帖子。感谢您在
app.use()
之后设置
app.route('/xhr/abc')…
(尤其是
body parser
multer
)?您好,谢谢这解决了我的问题。。。。