文件上传-req.body为空对象

时间:2018-07-09 09:12:50

标签: node.js multer

我正在使用multer上传有效的文件。上传之后,我需要在数据库中写入信息。

问题是我的req.body只是一个空对象,但是我正在发送正确的数据(通过表单数据)。我的req.file对象已填充并且效果很好。

奇怪的是,当我定义multer存储变量时,req.body可以正常工作并拥有我的所有数据。

这是我的Angular前端:

const formData = new FormData();
formData.append('participant', report.participantId.toString());
formData.append('coach', report.coachId.toString());
formData.append('type', report.reportType.toString());
formData.append('file', report.file, report.file.name);

这是我的node.js API。在这段代码中,我的req.body可以工作:

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, __dirname + '/../../temp/reports');
  },
  filename: function (req, file, cb) {
    var datetimestamp = Date.now();
    var filename = req.body.participant + "_" + req.body.type + "_" + datetimestamp + "_" + file.originalname;
    cb(null, filename);
  }
});

在它下面,我有我的帖子功能。 req.body在这里是一个空对象。

var upload = multer({ storage: storage }).single("file");

function init(router) {
  router.post("/report", upload, function (req, res, next) {
    if (req.file) {
      upload(req, res, function (err) {
        if (err) {
          return res.status(422).send("an Error occured");
        }
        path = req.file.path;
        reportService.addReport(req.body, path).then((data) => {
          res.send(data);
        }).catch((err) => {
          res.send(err);
        });    
        //return res.status(200).send(path);
      });
    }
 });
}

我在做什么错,或者我怎么解决这个问题?

0 个答案:

没有答案