使用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));
我得到undefined
和res.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) 。
* 我知道我可以使用restify
或sails.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