首页 > 解决方案 > 使用 multer 从 nodejs 更新图像

问题描述

我在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)
            }
        }
    })
}

标签: node.jsmulter

解决方案


您将findOneAndUpdate函数req.body作为数据提供,但它不包括图像文件名,因为文件名位于req.file.filename.

您可以{...req.body, img:req.file.filename}使用扩展运算符代替 req.body 给它。它从 req.body 中获取所有属性,并添加带有 value 的 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...

推荐阅读