Nodejs——要求.在express 4.x中未定义正文



我使用中间件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());但要确认你的邮差,因为他可能是问题

    最新更新