You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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错误捕获逻辑
    给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:27:21