Express.js req.body 未定义

新手上路,请多包涵

我有这个作为我的 Express 服务器的配置

app.use(app.router);
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Handles post requests
app.use(express.bodyParser());
//Handles put requests
app.use(express.methodOverride());

但是,当我在我的路线中要求 req.body.something 时,我仍然收到一些错误,指出 body is undefined 。以下是使用 req.body 的路由示例:

 app.post('/admin', function(req, res){
    console.log(req.body.name);
});

我读到这个问题是由于缺少 app.use(express.bodyParser()); 但你可以看到我在路由之前调用它。

有什么线索吗?

原文由 Masiar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 839
2 个回答

正如已经在一条评论下发布的那样,我使用

app.use(require('connect').bodyParser());

代替

app.use(express.bodyParser());

我仍然不知道为什么简单的 express.bodyParser() 不起作用……

原文由 Masiar 发布,翻译遵循 CC BY-SA 3.0 许可协议

2020 年 7 月更新

express.bodyParser() 不再捆绑为快递的一部分。加载前需要单独安装:

 npm i body-parser

// then in your app
var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  res.send('welcome, ' + req.body.username)
})

// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
  // create user in req.body
})

请参阅 此处 了解更多信息

原文如下

您必须确保在定义路由之前定义所有配置。如果这样做,您可以继续使用 express.bodyParser()

示例如下:

 var express = require('express'),
    app     = express(),
    port    = parseInt(process.env.PORT, 10) || 8080;

app.configure(function(){
  app.use(express.bodyParser());
});

app.listen(port);

app.post("/someRoute", function(req, res) {
  console.log(req.body);
  res.send({ status: 'SUCCESS' });
});

原文由 Mark Bonano 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题