我正在使用中间件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>
答案 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
启动服务器
app.listen(app.get(&#34; port&#34;),function(){ console.log(&#34; Express服务器侦听端口&#34; + app.get(&#34; port&#34;)); });
然后会工作..我不确定为什么但是在它发生几次后我才能吸取教训。
答案 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());
但请确认您的邮递员是否存在,因为他可能是问题