我使用中间件body-parser
来编码表单值以获得req。体对象。但是当我调试我的代码时,我发现了这个问题。主体未定义。这是我的代码
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
Listen Post request
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行之后的映射路由来解决问题。我现在看到需求了。正文正文
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.我导入所需的文件
var express = require("express");
var bodyParser = require("body-parser");
var morgan = require("morgan");
var db = require("./db.js");
var app = express();
2。我声明其他东西
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("port"), function () {console.log("Express server listening on port" + app.get("port"));});
然后将工作…我不知道为什么,但发生了几次之后,我吸取了教训。
如果您使用{ extended:false }
的urlencoded, req.body
将返回未解析的原始字符串从categoryName=test
的形式。这意味着req.body.categoryName
将未定义。
尝试传递true,以便它可以使用qs模块解析表单数据。
app.use(bodyParser.urlencoded({
extended: true
}));
由于body-parser模块用于解析body和url,因此应该在调用" request .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;
});
我用这个:
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json());
但要确认你的邮差,因为他可能是问题