Cloudinary上传报Cannot read properties of undefined (reading 'image')错误求助
问题修复方案
核心错误原因
你当前的报错是控制器模块导出逻辑错误导致的路由绑定异常:
你在控制器文件末尾连续两次赋值module.exports,后面的uploadImage会直接覆盖前面的createPost,导致/create-post路由绑定的createPost实际指向的是uploadImage函数。
你发布帖子调用/create-post接口时,没有上传图片文件,req.files为undefined,uploadImage函数尝试读取req.files.image.path就会抛出你遇到的TypeError: Cannot read properties of undefined (reading 'image')错误。
分步修复操作
1. 修复控制器导出逻辑
把控制器文件末尾的导出代码替换为以下内容,同时导出两个控制器方法:
// 替换原来的两行module.exports赋值 module.exports = { createPost, uploadImage };
同时修改路由文件中引入控制器的代码,改为解构引入:
// 路径对应你实际的文件位置即可 const { createPost, uploadImage } = require('../controler/post/post');
2. 修复发布帖子的提交逻辑
你在handleFile上传完图片后已经把图片地址存在了image状态中,但提交create-post接口时没有把图片数据传给后端,需要修改submit函数的请求参数:
const { data } = await axios.post( "http://localhost:8000/api/create-post", { content, // 新增:把上传完成的图片数据传给后端 image: image }, { headers: { Authorization: `Bearer ${token.token}`, }, } );
3. 可选优化(非必改)
如果你后续需要支持在发布帖子时同时上传图片和内容,可以给/create-post路由也加上formidable中间件:
router.post("/create-post", requireSignIn, formidable({ maxFileSize: 5 * 1024 * 1024 }), createPost);
验证操作
修改完成后重启后端服务,先上传图片拿到返回的地址,再输入内容点击发布,即可正常创建带图片的帖子。
内容的提问来源于stack exchange,提问作者Alan66
相关产品推荐
相关产品推荐

