如何使用节点 js 将图像放入 mongodb
How to put image into mongodb using node js
我想将个人资料图片放入 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 的上传文件夹中,但它没有保存在数据库中。
findOneAndUpdate
函数的第二个参数必须是具有要更新的字段且值为:
的对象
Users.findOneAndUpdate({ email: req.params.email }, { profileimg: req.file.filename }).then(...)
您可以像下面的代码那样做:
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) 然后,你要存储的字段,在这里使用它并更改此示例。
希望对您有所帮助
我想将个人资料图片放入 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 的上传文件夹中,但它没有保存在数据库中。
findOneAndUpdate
函数的第二个参数必须是具有要更新的字段且值为:
Users.findOneAndUpdate({ email: req.params.email }, { profileimg: req.file.filename }).then(...)
您可以像下面的代码那样做:
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) 然后,你要存储的字段,在这里使用它并更改此示例。
希望对您有所帮助