如何使用Node JS将图像放入mongodb

时间:2020-01-28 10:27:34

标签: node.js mongodb express multer

我想将个人资料图片放入mongodb的users集合中,我想在用户获取其个人资料时检索此图片。

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 个答案:

答案 0 :(得分:2)

findOneAndUpdate函数的第二个参数必须是一个具有要更新的字段和值的对象:

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

答案 1 :(得分:0)

您可以按照以下代码进行操作:

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}}

  • 配置文件图像:随mongodb中的字段更改
  • req.file.filename:确保确保console.log(req.file),然后在要存储的字段中在此处使用它并更改此示例。

我希望它能为您提供帮助。