Javascript 使用multer同时发布两个集合
我在发布两个集合时遇到了一个问题——一个是file,一个是literal对象,其中包含基于file的字段。 这是路线方法Javascript 使用multer同时发布两个集合,javascript,post,multer,gridfs,Javascript,Post,Multer,Gridfs,我在发布两个集合时遇到了一个问题——一个是file,一个是literal对象,其中包含基于file的字段。 这是路线方法 // @route POST /upload // @desc Uploads file to DB router.post('/', upload.single('file'), auth, (req, res) => { const newFile = new File({ fileID: req.file.id, src: 'api/file
// @route POST /upload
// @desc Uploads file to DB
router.post('/', upload.single('file'), auth, (req, res) => {
const newFile = new File({
fileID: req.file.id,
src: 'api/files/image/' + req.file.filename,
altText: 'No image',
caption: req.body.caption
})
newFile.save()
});
和文件模型:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const FileSchema = new Schema({
fileID: {
type: Schema.Types.ObjectId
},
src: {
type: String
},
altText: {
type: String
},
caption: {
type: String
}
});
module.exports = File = mongoose.model('file', FileSchema);
问题是,如果这样做,我将无法获取标题属性,并且会出现错误:
TypeError:无法读取未定义的属性“id”
或者如果我把它去掉
req.file.id
我明白了
TypeError:无法读取未定义的属性“filename”
即使我在我的数据库中得到了很好的值。
如果我同时删除id和文件名,我将获得caption属性。
所以问题是:
fileID: req.file.id,
src: 'api/files/image/' + req.file.filename
但我不知道如何处理。我仍然不知道如何处理它,但我确实使用了控制台登录后路由方法: //@route POST/上传 //@desc将文件上载到数据库
router.post('/', upload.single('file'), auth, (req, res) => {
console.log(req.file);
const newFile = new File({
fileID: req.file.id,
src: 'api/files/image/' + req.file.filename,
altText: 'No image',
caption: req.body.caption
})
newFile.save()
});
我得到:
undefined
[0] { fieldname: 'file',
[0] originalname: 'slide1.jpg',
[0] encoding: '7bit',
[0] mimetype: 'image/jpeg',
[0] id: 5de06f65ff1bdb5388f1a44c,
[0] filename: 'e872d1cafee8d191b256d27efc5ac94f.jpg',
[0] metadata: null,
[0] bucketName: 'files',
[0] chunkSize: 261120,
[0] size: 235600,
[0] md5: '06ef6fba95a331af99276199589d3ed4',
[0] uploadDate: 2019-11-29T01:07:50.105Z,
[0] contentType: 'image/jpeg' }
看来我必须等待请求,因为
请求文件
还没有定义,所以我得到了错误,它停止并没有发布这个req.body.caption。
这就是我所怀疑的