node.js - multer 中间件内的 req.body 中缺少某些属性

标签 node.js multer

我有一个客户端应用程序发布了一些 formData到我的 Node 后端。来自客户端的数据最初是一个包含 files 的对象。属性(property)等。在发布到后端之前,我将对象转换为 formData .

// client.js file
const person = {
  email: 'johndoe@gmail.com',
  age: 19,
  files: [File, File, File],
  occupation: '',
  status: 'active',
}

person.occupation = this.getOccupation(); // getOccupation() is defined somewhere in the file

const formData = new FormData();
Object.entries(person).forEach(([key, value]) => {
  if (key === "files") {
    for (let i = 0; i < person[key].length; i++) {
       formData.append("files", person[key][i]);
    }
  } else {
     formData.append(key, value);
  }
});

// The following logs output the correct information so we're good until this point
console.log(formData.getAll("files"));
console.log(formData.get("occupation"));
console.log(formData.get("status"));

this.submitData(formData); // Posts to the backend
数据通过 multer 中间件发布到 Node 后端的路由 - uploadFiles() .
const submitDataOptions = {
  storage: multer.diskStorage({
    destination: "./public/uploads/users/files",
    filename: function (req, file, cb) {
      console.log('Request body');
      console.log(req.body);
      console.log('Occupation');
      console.log(req.body.occupation);
      console.log('Status');
      console.log(req.body.status);
      const ext = file.mimetype.split("/")[1];
      const datetimestamp = Date.now();
      const fname = `${datetimestamp}.${ext}`;
      cb(null, fname);
    },
  }),
};

uploadFiles() {
  return multer(submitDataOptions).array("files");
}
文件上传得很好但是当我 console.log(req.body) ,我注意到一个只有属性 email 的对象和 age被退回。日志记录 occupationstatus返回 undefined在任一情况下。 multer 文档说 req.body将包含文本字段(如果有)但在这种情况下我找不到那些。
这里有什么问题?

最佳答案

req.body可能还没有完全填充。这取决于客户端向服务器传输字段和文件的顺序。
所以只需将文件放在对象的最后:

const person = {
  email: 'johndoe@gmail.com',
  age: 19,
  occupation: '',
  status: 'active',
  files: [File, File, File],
}

关于node.js - multer 中间件内的 req.body 中缺少某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64862677/

相关文章:

javascript - Multer 不上传文件

javascript - Node js正常文件上传代码在执行时显示错误

node.js - busboy文件上传错误 "Unexpected end of multipart data"

node.js - 提取无法用于上传图像 native

node.js - Kue 连接到 localhost 而不是 AWS elasticache 主机

javascript - NodeJS 中的异步与同步

node.js - 在单个端口上运行多个 Node Express 应用程序

javascript - Multer Node.js 的文件上传 MIME 类型问题

node.js - 使用 Node.js 对杯子执行打印操作

node.js - 如何在 Heroku 上运行两台服务器?