Express中Multer中间件不执行 导致请求处于pending挂起状态
Multer上传请求挂起问题修复方案
核心错误原因
路由挂载中间件时传入了未初始化配置的原生multer模块,而非你提前配置好存储规则、导出的单文件上传实例,导致Multer无法正常解析multipart/form-data格式的上传请求,请求会一直处于挂起状态无法进入后续处理逻辑。
修复步骤
- 修正路由中间件引用
你编写的Multer配置文件已经导出了调用multer({storage: storage}).single('image')生成的可用中间件实例,路由中不能直接使用require('multer')得到的原生multer对象,需要先引入你自己的配置文件,再把导出的实例挂载到路由上。
错误的路由配置:
修正后的路由配置(注意调整配置文件的引入路径和你实际项目结构匹配):router.post('/add-avatar', multer, addAvatar);// 引入自定义的Multer配置实例,假设配置文件存放在middleware/multer-config.js const upload = require('../middleware/multer-config'); router.post('/add-avatar', upload, addAvatar); - 排查2个高频触发挂起的潜在问题
- 确认存储目录存在:Multer的diskStorage模式不会自动创建目标目录,需要手动在项目对应路径创建
images文件夹,否则文件写入时会触发异常导致请求挂起。 - 确认测试工具配置正确:用Postman测试时,请求Body必须选择
form-data格式,文件字段的Key要和Multer配置的.single('image')完全一致(即Key填image,右侧类型选择File后再选择本地图片文件),不能使用x-www-form-urlencoded格式。
- 确认存储目录存在:Multer的diskStorage模式不会自动创建目标目录,需要手动在项目对应路径创建
- 补充Multer错误捕获逻辑
给Multer中间件增加错误回调,出现文件类型不匹配、目录无写入权限等问题时直接返回错误,避免无响应挂起:router.post('/add-avatar', (req, res, next) => { upload(req, res, (err) => { if (err) return res.status(400).send({ error: err.message }); next(); }); }, addAvatar); - 核对控制器方法引用
你贴出的路由配置中处理函数名为addAvatar,但控制器代码中导出的方法名为add,需要确认引入时的命名匹配,否则会触发函数未定义错误。
验证方式
修改完成后重启Node服务,重新发送上传请求即可正常拿到图片访问链接,上传的文件会存入images目录,可通过你配置的/images/文件名静态路径直接访问。
内容的提问来源于stack exchange,提问作者daniel sas
相关产品推荐
相关产品推荐

