Почему мой Mon goose не сохраняет документ при использовании Multer для загрузки файла? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать обработчик 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», только с именем файла и только передавая имя файла, но это тоже не работает.

...