Nodejs需求主体在带有Express 4.x的帖子中未定义

问题描述 投票:10回答:6

我正在使用中间件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>
node.js express
6个回答
12
投票

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

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


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

7
投票

这为我解决了问题

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

希望此帮助


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(“ port”),function(){console.log(“ Express服务器监听端口” + app.get(“ port”));});

然后可以正常工作..我不确定为什么,但是在发生了几次之后,我学习了这堂课。


2
投票

如果您使用以{ extended:false }进行urlencoded,则req.body将以categoryName=test的形式返回未解析的原始字符串。含义req.body.categoryName将不确定。

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

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

1
投票

由于body-parser模块用于解析正文和URL,因此应在对“ 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;
});

0
投票

我正在使用此:

© www.soinside.com 2019 - 2024. All rights reserved.