multer 中间件中的 req.body 中缺少一些属性
Some properties missing in req.body inside multer middleware
我有一个客户端应用程序将一些 formData
发布到我的节点后端。来自客户端的数据最初是一个包含 files
属性 等的对象。在发布到后端之前,我将对象转换为 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 中间件将数据发布到节点后端的路由 - 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
的对象。在这两种情况下记录 occupation
和 status
returns undefined
。 multer 文档说 req.body
将包含文本字段(如果有的话),但在这种情况下我找不到那些。
这里有什么问题?
req.body
可能尚未完全填充。这取决于客户端向服务器传输字段和文件的顺序。
所以只需将文件放在对象的最后:
const person = {
email: 'johndoe@gmail.com',
age: 19,
occupation: '',
status: 'active',
files: [File, File, File],
}
我有一个客户端应用程序将一些 formData
发布到我的节点后端。来自客户端的数据最初是一个包含 files
属性 等的对象。在发布到后端之前,我将对象转换为 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 中间件将数据发布到节点后端的路由 - 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
的对象。在这两种情况下记录 occupation
和 status
returns undefined
。 multer 文档说 req.body
将包含文本字段(如果有的话),但在这种情况下我找不到那些。
这里有什么问题?
req.body
可能尚未完全填充。这取决于客户端向服务器传输字段和文件的顺序。
所以只需将文件放在对象的最后:
const person = {
email: 'johndoe@gmail.com',
age: 19,
occupation: '',
status: 'active',
files: [File, File, File],
}