使用 multer 从 nodejs 更新图像
update image from nodejs using multer
我在 nodejs 中使用 multer 上传图片,图片存储在数据库中,也显示在网站上,但是在更新标题和描述时更新但图片未更新我该如何更新图片?
这是我的控制器
router.post('/',upload.single('image'),(req,res)=>{
if(req.body._id == ''){
insertRecord(req,res)
}
else {
updateRecord(req,res);
}
})
function updateRecord(req,res){
Blog.findOneAndUpdate({ _id: req.body._id},req.body, { new: true},(err,doc)=>{
if(!err){res.redirect('blog/list')}
else{
if(err.name == 'Validation Error'){
handleValidationError(err,req.body)
res.render("blog/addOrEdit",{
viewTitle:"insert about file",
blog: req.body
})
}else{
console.log("error during record update: " +err)
}
}
})
}
function insertRecord(req,res){
var blog = new Blog()
blog.title = req.body.title
blog.description = req.body.description
blog.img = req.file.filename
blog.save((err,doc) =>{
if(!err){
res.redirect('blog/list')
}
else{
if(err.name == 'Validation Error'){
handleValidationError(err,req.body)
res.render("blog/addOrEdit",{
viewTitle:"insert about file",
blog: req.body
})
}
else{
console.log('Error duing record insertion: '+err)
}
}
})
}
您将 findOneAndUpdate
函数 req.body
作为数据提供,但它不包含图像文件名,因为文件名位于 req.file.filename
.
你可以用扩展运算符给它 {...req.body, img:req.file.filename}
而不是 req.body。它从 req.body 获取所有属性并添加 img 属性 和值 req.file.filename
。我使用了“img”属性,因为你在插入博客时设置了blog.img
。
或者,您可以创建一个新对象并设置 img 属性:
const updateData = Object.assign({},req.body); // Copy req.body in order not to change it
updateData.img = req.file.filename
Blog.findOneAndUpdate({ _id: req.body._id},updateData...
我在 nodejs 中使用 multer 上传图片,图片存储在数据库中,也显示在网站上,但是在更新标题和描述时更新但图片未更新我该如何更新图片?
这是我的控制器
router.post('/',upload.single('image'),(req,res)=>{
if(req.body._id == ''){
insertRecord(req,res)
}
else {
updateRecord(req,res);
}
})
function updateRecord(req,res){
Blog.findOneAndUpdate({ _id: req.body._id},req.body, { new: true},(err,doc)=>{
if(!err){res.redirect('blog/list')}
else{
if(err.name == 'Validation Error'){
handleValidationError(err,req.body)
res.render("blog/addOrEdit",{
viewTitle:"insert about file",
blog: req.body
})
}else{
console.log("error during record update: " +err)
}
}
})
}
function insertRecord(req,res){
var blog = new Blog()
blog.title = req.body.title
blog.description = req.body.description
blog.img = req.file.filename
blog.save((err,doc) =>{
if(!err){
res.redirect('blog/list')
}
else{
if(err.name == 'Validation Error'){
handleValidationError(err,req.body)
res.render("blog/addOrEdit",{
viewTitle:"insert about file",
blog: req.body
})
}
else{
console.log('Error duing record insertion: '+err)
}
}
})
}
您将 findOneAndUpdate
函数 req.body
作为数据提供,但它不包含图像文件名,因为文件名位于 req.file.filename
.
你可以用扩展运算符给它 {...req.body, img:req.file.filename}
而不是 req.body。它从 req.body 获取所有属性并添加 img 属性 和值 req.file.filename
。我使用了“img”属性,因为你在插入博客时设置了blog.img
。
或者,您可以创建一个新对象并设置 img 属性:
const updateData = Object.assign({},req.body); // Copy req.body in order not to change it
updateData.img = req.file.filename
Blog.findOneAndUpdate({ _id: req.body._id},updateData...