Как поместить изображение в mongodb, используя node js - PullRequest
0 голосов
/ 28 января 2020

Я хочу поместить изображение профиля в коллекцию пользователей в mongodb, и я хотел бы получить это изображение, когда пользователь выбирает его профиль.

var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads/')
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now()+ path.extname(file.originalname));
    }
});
var upload = multer({ storage: storage });
router.put('/user/profile/img/:email', upload.single('profileimg'), (req, res, next) => {
    // console.log(req.file);
    Users.findOneAndUpdate({ email: req.params.email }, req.file.filename).then(() => {
        Users.findOne({ email: req.params.email }).then((resp, err) => {
            res.send(resp);
        })
    })
})

Изображение сохраняется при загрузке папка в моем API, но она не сохраняется в БД.

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Второй параметр функции findOneAndUpdate должен быть объектом с полем для обновления и значением:

Users.findOneAndUpdate({ email: req.params.email }, { profileimg: req.file.filename }).then(...)

0 голосов
/ 28 января 2020

Вы можете сделать это следующим образом:

router.put('/user/profile/img/:email', upload.single('profileimg'), async (req, res, next) => {
  try {
    // check your file is uploaded
    // check your field
    console.log(req.file);
    const result = await Users.findOneAndUpdate({ email: req.params.email }, {$set: { profileimage : req.file.filename}}, { returnOriginal: false})
    res.send(result)
  } catch(ex) {
    res.status(500).send(ex.message);
  }
})

Примечание: Для этого {$set: { profileimage : req.file.filename}}

  • profileimage: измените поле в вашем mongodb
  • req.file.filename: убедитесь, что console.log (req.file) затем, где поле, которое вы хотите сохранить, используйте его в вот и измени этот пример.

Надеюсь, он тебе поможет.

...