Express使用multer上传文件时req.file为undefined如何解决
问题解决方案
核心原因
你遇到的两个问题本质都是multer中间件的执行顺序错误:multer是唯一负责解析multipart/form-data类型请求体的中间件,只有经过它处理之后,请求对应的req.body(表单普通字段)和req.file(上传的文件)才会被挂载到请求对象上。你原来的路由配置里,把需要读取req.body的newpost中间件放在了multer前面,自然无法正确获取相关数据。
修复步骤
1. 调整路由中间件顺序
修改user.js路由文件中的接口配置,把uploads.single('post')移动到newpost前面:
// 修改前 // router.post('/create-post',isAuth,newpost,uploads.single('post'),uploadPost); // 修改后 router.post('/create-post',isAuth,uploads.single('post'),newpost,uploadPost);
调整后执行顺序为:
- 鉴权中间件
isAuth执行 multer解析请求体,挂载req.body和req.filenewpost读取req.body.display_name创建并保存帖子uploadPost读取req.file上传到Cloudinary,更新帖子的图片链接
2. 补充优化(可选但建议修改)
你的Post模型中timestamp字段默认值配置错误,会导致所有帖子的时间都是服务启动时间,改成动态获取当前时间:
// 修改前 // timestamp:{ // type:String, // default:Date.now() // } // 修改后 timestamp:{ type:String, default:Date.now }
验证方式
修改后保持Postman的配置不变:请求格式选form-data,文件字段key为post,不要手动设置Content-Type请求头,即可同时拿到req.body.display_name和req.file。
内容的提问来源于stack exchange,提问作者Rahul Thakur
相关产品推荐
相关产品推荐

