使用Express.js无法从请求中获取POST正文

我正在与NodeJS和Express(和更多的东西,如mongo,套接字等)的API工作,但我坚持一个非常简单的步骤,我相信,我只是想从POST req对象获取信息,但是当我尝试访问req.body时出现错误

这是我有:

 var express = require('express'), http = require('http'), path = require('path'), fs = require('fs'), io = require('socket.io'); dynroute = require('dynroute'); var app = express(); app.set('port', process.env.PORT || 3999); app.use(express.favicon()); app.use(express.logger('dev')); app.use(app.router); app.use(express.bodyParser()); app.post('/user', function(req, res) { console.log(JSON.stringify(req.body)); res.send(req.body.self); }); http.createServer(app).listen(app.get('port'), function () { console.log('App Server is now running at:' + app.get('port')); }); 

console.log(JSON.stringify(req.body)); 我得到undefinedres.send(req.body.self); 我得到TypeError: Cannot read property 'self' of undefined

我一直在寻找这种types的错误,通常的问题是人们不包括app.use(express.bodyParser()); 中间件,我也尝试使用app.use(express.urlencoded());app.use(express.json()); ,也没有工作。

如果我做了一个console.log(req)我可以看到整个对象,但我不明白body或任何内容,我通过从客户端POST请求传递(我通过它作为JSON) 。

* 我知道我可以使用restifysails.js在Node中构buildAPI,但是我想要自己做所有事情,所以我可以从经验中学习。

谢谢

编辑:

我不得不在bodyparser中间件之前app.router中间件,解决它!

移动router中间件上面的bodyParser中间件!

 var app = express(); app.set('port', process.env.PORT || 3999); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(app.router); 

Content-Type = "application/json"应该是Request Headers

BodyParser不再与Express捆绑在一起

 npm install body-parser var bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({ extended: false })); 

对于我来说,kevinblanco的说明是“我必须在app.router中间件之前放置bodyparser中间件,才能解决这个问题!” 为我做了。 把它埋在底部,把它放在一个单独的答案。

你的代码需要如下所示:

 app.use(favicon()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); // My routing here