使用 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...