Nodejs- Req.body在使用express 4.x的帖子中未定义

时间:2014-07-15 10:10:03

标签: node.js express

我正在使用中间件body-parser对表单值进行编码以获取req.body对象。 但是当我调试我的代码时,发现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>

6 个答案:

答案 0 :(得分:12)

刚遇到同样的问题。看起来我通过将代码移动到urlencoded行之后映射路由来解决我的问题。我现在在帖子中看到了req.body。

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


// Map routes
var controllers = require("./controllers");
controllers.init(app);

答案 1 :(得分:7)

这解决了我的问题

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

希望这个帮助

答案 2 :(得分:3)

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

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

var app                = express();

2.i宣布其他东西

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.listen(app.get(&#34; port&#34;),function(){     console.log(&#34; Express服务器侦听端口&#34; + app.get(&#34; port&#34;)); });

  2. 然后会工作..我不确定为什么但是在它发生几次后我才能吸取教训。

答案 3 :(得分:2)

如果您使用的是{ extended:false }的urlencoded,req.body将从categoryName=test格式返回未解析的原始字符串。含义req.body.categoryName将是未定义的。

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

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

答案 4 :(得分:1)

由于body-parser模块用于解析body和url,因此应该在调用&#34; req.body之前调用它...&#34;

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;
});

答案 5 :(得分:0)

我正在使用这个

const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(express.json()); 但请确认您的邮递员是否存在,因为他可能是问题