繁体   English   中英

快递POST呼叫中req.body为空

[英]req.body is empty on express POST call

我正在尝试以快递方式编写示例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();
    }
});

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

在此处输入图片说明

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

然后以JSON格式输入数据。 如果您设置了标头,则邮递员应将其格式化: Content-Type: application/json

编辑:

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

由于其复杂且通常较大的性质,因此无法处理多部分实体。 对于多部分实体,您可能对以下模块感兴趣:

  • busboy和connect-busboy
  • 多方和连接多方
  • 强大
  • 磨碎机

Github链接

要阅读为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); }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM