Nodejs-Req.body未定义在后快速4.x

我正在使用中间件body-parser来编码表单值以获取req.body对象。 但是当我debugging我的代码,发现req.body是未定义的。 这是我的代码

 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false })); 

收听发布请求

 app.post('/newCategory', function (req,res) { //express attached the form encoded values into body var categoryName = req.body.categoryName; }); 

Html表单

 <form action="/newCategory" role="form" method="post" class="form-inline"> <input type="text" name="categoryName" placeholder="Category name" class="form-control" /> <input type="submit" value="New Category" class="btn btn-primary" /> </form> 

刚刚遇到同样的问题。 它看起来像解决了我的问题,我的代码移动到urlencoded行后的地图路线。 我现在在post里看到了req.body。

 app.use(bodyParser.urlencoded({ extended: true })); // Map routes var controllers = require("./controllers"); controllers.init(app); 

这解决了我的问题

 var bodyParser = require('body-parser'); var app=express(); app.use(bodyParser.urlencoded()); app.use(bodyParser.json()); 

希望这个帮助

我注意到这个顺序非常重要。 通常应该在启动服务器之前声明路由器。 例如:1.i导入所需的文件

 var express = require("express"); var bodyParser = require("body-parser"); var morgan = require("morgan"); var db = require("./db.js"); var app = express(); 

我宣布其他的东西

 app.set("port", process.env.PORT || 3000); //app.use(express.static(__dirname + '/public')); app.use(morgan('dev') ); // Log every request to console app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); 

3.之后包括路线 – 最重要的一步

 var routes = require('./routes/routes'); routes(app); //routes shall use Express 
  1. 启动服务器

    (app.get(“port”),function(){console.log(“Express server listening on port”+ app.get(“port”));});

然后将工作..我不知道为什么,但是在它发生几次后,我学到的教训。

如果您使用urlencoded { extended:false } ,则req.body将从表单categoryName=test返回未parsing的原始string。 含义req.body.categoryName将是未定义的。

尝试传递true以便它可以使用qs模块parsing表单数据。

 app.use(bodyParser.urlencoded({ extended: true })); 

由于body-parser模块用于parsingbody和urls,所以在调用“req.body …”之前应该调用它。

 var bodyParser = require("body-parser"); ///////req.body is undefined here //extended: false means you are parsing strings only (not parsing images/videos..etc) app.use(bodyParser.urlencoded({extended: false}); ///////you req.body is working here (module below is using req.body) app.use("/", module); app.post('/newCategory', function (req,res) { var categoryName = req.body.categoryName; });