Я пытаюсь создать обработчик POST для обработки загрузки изображений в базу данных MongoDB. Я хочу, чтобы у меня было две коллекции: одна для данных изображений, хранящихся с использованием GridFS («uploads.files»), а другая для хранения метаданных изображений, имен файлов, тегов и т. Д. c («Изображения»).
Я использую multer для обработки загрузки файла. Вот мой обработчик для почтового маршрута, используя multer. upload () - это механизм хранения данных. Он добавляет изображение в качестве атрибута «file» к объекту req (req.file)
app.post('/upload', upload.single('file'), (req, res) => {
// Instead of immediately uploading the files,
// we want to associate the files with the appropriate metadata.
// Store the filename with the metadata as a mongoose model in a
// seperate collection.
const pic = new Picture({
filename: req.file.filename,
fileId: mongoose.Types.ObjectId(req.file.id)
});
pic.save()
res.redirect("/");
});
Изображение представляет собой модель Mon goose, определенную здесь:
const PictureSchema = new mongoose.Schema({
filename: String,
fileId: mongoose.Schema.Types.ObjectId
});
const Picture = mongoose.model("Picture", PictureSchema);
My проблема заключается в том, что, хотя изображения правильно загружаются в корзину GridFS, коллекция «Pictures» не создается. Экземпляр Picture Model, который я создаю с помощью новой функции Picture (), не сохраняется в базе данных. На моем терминале нет ошибок при загрузке.
Обратите внимание, что _id файла GridFS доступен через req.file.id. Я могу console.log это значение, и оно вернет действительное значение.
Я также пытался использовать альтернативную модель без атрибута «fileId», только с именем файла и только передавая имя файла, но это тоже не работает.