如何解决MERN栈中Multer上传图片更新后值为null的问题
解决MERN中Multer更新帖子时图片字段被设为null的问题
问题分析
当前更新逻辑的核心问题是:只要未上传新图片,profile就会被赋值为null并覆盖数据库中原有的图片路径;同时路由代码存在语法错误,upload.single("profile")与updatePost之间缺失逗号。
修复步骤
修正路由语法错误
将更新路由的代码修改为://Update a Post router.put("/:id", upload.single("profile"), updatePost);调整更新逻辑,避免覆盖原有图片
仅在上传新图片时才更新profile字段,否则保留数据库中的原有值。修改updatePost函数如下://Update a Post const updatePost = async (req, res) => { const { desc } = req.body; // 构建待更新字段集合 const updateData = { desc }; // 仅当存在新上传文件时,添加profile字段 if (req.file) { updateData.profile = req.file.filename; } try { // 添加{ new: true }返回更新后的文档(默认返回更新前的旧文档) const updatedPost = await Post.findByIdAndUpdate( req.params.id, updateData, { new: true } ); res.status(200).json({ updatedPost, success: "Post Updated Successfully" }); } catch (error) { res.status(404).json({ error: error.message }); } };
额外提示
如果需要清理服务器上的旧图片以避免冗余文件,可以在更新前先查询旧帖子的profile路径,使用fs.unlink方法删除对应的文件。
内容的提问来源于stack exchange,提问作者Bipin Bhandari
相关产品推荐
相关产品推荐

