【发布时间】:2022-08-18 15:07:58
【问题描述】:
每当我从邮递员上传新文件时,它都会覆盖现有文件并仅保存一个上传的文件。
我尝试过document.push 方法,但它记录了“TypeError:documents.push 不是函数”的错误,但是当我记录console.log(documents)时,它会记录在一个数组中。难道我做错了什么?
处理文件上传的multer函数:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, \"./src/uploads/\");
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname + \"-\" + Date.now() + path.extname(file.originalname)
);
},
});
var upload = multer({
storage: storage,
fileFilter: function (req, file, cb) {
var filetypes = /jpeg|jpg|png|pdf/;
var mimetype = filetypes.test(file.mimetype);
var extname = filetypes.test(path.extname(file.originalname).toLowerCase());
if (mimetype && extname) {
return cb(null, true);
}
cb(\"Please upload valid file\");
},
}).array(\"documents\");
uploadDocument 服务文件:
exports.uploadDocuments = async (id, documents, file) => {
let files = documents.push(file);
let document = await User.findByIdAndUpdate(
{ _id: id },
{ $set: { documents: files, registration_process_value: 99 } },
{ new: true }
);
return document;
};
上传文件的用户控制器:
exports.updateDocuments = catchAsync(async (req, res) => {
try {
check_user = await userService.getUser(req.data.id);
if (!check_user) return res.status(404).json({ message: \"User not found\" });
if (check_user.registration_process_value >= 4) {
let uploadDocument = await userService.uploadDocuments(
check_user.id,
check_user.documents,
req.files
);
return res.status(200).json({ data: uploadDocument });
}
} catch (error) {
return res.status(400).json({ message: error });
}
});
文件类型是大批在如下架构中:
documents: {
type: Array,
}
documents.push(file) 正在返回一个数字(例如,如果我 console.log(files) 在从邮递员发送请求后返回“文件 - > 2”)。它不是推送文件的实际数据。
-
还请发布您的
User架构。 -
早些时候它是 [String] 但现在它是
documents: { data: Buffer, contentType: String, }, -
请将完整架构添加到您的问题中。
-
我已经更新了这个问题。请通过它并指导我。
-
您应该阅读有关subdocuments 的文档。架构中
documents的声明无效。此外,您不能(真的)像那样在 MongoDB 中存储图像(或二进制)数据。阅读this 了解更多信息。
标签: node.js mongodb express multer