node.js - 使用 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)
}
}
})
}
解决方案
您将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...
推荐阅读
- loops - 如何在 Ansible 中解决这个特定的嵌套循环?
- c# - Fluent Nhibernate Sqlite Linq where 语句问题
- jenkins - 如何在 Jenkins 上对 Docker 映像进行版本控制并将其传递给 Kubernetes YAML 文件
- android - android kotlin exo player 响应码:401
- javascript - javascript / jQuery - 替换正文中所有出现的字符串而不替换整个正文的最有效方法是什么
- javascript - 使用 node js 将 fs 代码转换为 fs-extra
- java - Java 文件命名限制
- python - 通过 Selenium Python 登录 Google 不工作
- java - android studio app does not run on emulator
- angular - 如何在 Angular 中注释扩展组件类?(遗产)