【发布时间】:2018-10-31 21:02:00
【问题描述】:
我在客户端使用了一个表单,用户可以在该表单上上传任意数量的文件,然后我使用 axios 将其全部发送出去。
在 NodeJS 中接收它,我正在使用 Multer 使用 req.files 获取文件及其信息,如下所示:
[ { fieldname: 'file1',
originalname: 'someimage.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './uploads/',
filename: '71027041755f49366c132555066d5b89',
path: 'uploads\\71027041755f49366c132555066d5b89',
size: 69336 } ]
正如我们所见,它是一个数组,可以包含多个文件,这很好,但我的问题来了。
我想使用 Mongoose 将这些文件的信息存储在 MongoDB 中,以便我知道文件的调用方式、目的地、大小等。
我在 Mongoose 中这样定义了一个 Schema:
const someSchema = new Schema({
files: {
originalname: String,
filename: String,
mimetype: String,
size: String,
destination: String,
path: String
}
});
但这只会让我存储一个文件信息。我之前也尝试过:
const someSchema = new Schema({
files: Array
});
但这行不通 (TypeError: Cannot set property 'originalname' of undefined)。我还尝试设置Object,这也会出错(TypeError: Cannot read property '0' of undefined)。
顺便说一句,我正在阅读“文件”:
for (let i = 0; i < req.files.length; i++) {
someschema.files[i].originalname = req.files[i].originalname;
someschema.files[i].filename = req.files[i].filename;
someschema.files[i].mimetype = req.files[i].mimetype;
someschema.files[i].size = req.files[i].size;
someschema.files[i].destination = req.files[i].destination;
someschema.files[i].path = req.files[i].path;
}
记录以上每个req.files[i].XXX,一切都按应有的方式定义。
有没有办法制作一个接受多个“文件”的架构?
换句话说:如果可能的话,有没有办法制作一个接受具有多个对象的数组的架构?
提前致谢。
编辑:我想出了files: [Object],但这也行不通(TypeError)。
【问题讨论】: