【问题标题】:req.body is empty on express POST callreq.body 在 express POST 调用中为空
【发布时间】:2017-09-22 15:19:38
【问题描述】:

我正在尝试用 express 编写一个示例 POST 调用。

var express     = require("express")
    , app       = express()
    , server    = require('http').createServer(app)
    , bodyParser = require('body-parser');

app.listen(80, function() {
   console.log("server started"); 
});

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

app.post("/test", function(req, res) {
    try {
        console.log(req.body);
        res.send("working " + req.body.name); 
    } catch(e) {
        console.log("error in test API" + e.message);
        res.end();
    }
});

但我无法访问服务器上的正文数据。它是空的。以下是邮递员查询。

【问题讨论】:

  • 您通过 POST 请求发送什么数据
  • @RohitAgrawal 它是一个表单数据名称=abcd。它在邮递员屏幕截图中。
  • 有空对象{}
  • 您要访问从表单传递的数据还是以 JSON 形式发布的数据?

标签: javascript node.js


【解决方案1】:

如果需要 JSON 数据,请在 Postman 的 body 下选择 raw,而不是 form-data。

然后输入 JSON 格式的数据。如果您设置了标题,邮递员应该对其进行格式化:Content-Type: application/json

编辑:

如果要解析表单数据,则不能使用自述文件中所述的 body-parser:

这不处理多部分实体,因为它们复杂且通常很大。对于多部分正文,您可能对以下模块感兴趣:

  • busboy 和 connect-busboy
  • 多方和连接多方
  • 强大
  • 穆特

Github link

【讨论】:

  • @Shubham 你可以在尝试这样发送时显示 Postman 的照片吗?
  • 我想访问表单数据,我将内容类型更改为application/json
  • @Shubham 编辑了我的答案。
【解决方案2】:

要读取为 req.body ,我认为您缺少 Content-Type : application/json 标头,添加它并将请求转换为原始 json。否则你得到一个字符串,不能直接作为 req.body 访问它

例如:

{"name" : "abcd"}

更新:

如果您需要表单数据,请使用 bodyParser 将文本转换为 json

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

更新 2:

看来问题出在您使用的 multipart/form-data 上。为了处理它,由于安全问题,您需要一个特定的框架,如multer。以下应该可以工作。

var multer  = require('multer');

var upload = multer() ;

app.post('/test', upload.array(), function (req, res, next) {
   console.log(req.body);
});

【讨论】:

  • @Shubham 尝试设置扩展:true
  • @KalanaDamel multer 将工作。我在单独的项目中使用了它。在这个表单数据中,我猜没有多部分数据。那么为什么body-parser 不起作用。
  • @Shubham multipart/form-data 被认为是一种 html 编码,因此当通过这种方式上传文件时成为一个安全问题,并且由于其数据的复杂性,它被从正文解析器中取出,它需要使用中间件来访问它。
猜你喜欢
  • 2018-04-30
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2016-02-15
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多