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

使用express-formidable处理multipart数据时普通POST请求无限挂起问题

问题原因

你将express-formidable注册为全局中间件,它会拦截所有POST请求尝试解析表单数据流。而普通application/json、application/x-www-form-urlencoded类型的请求体已经被前面的express.json()、express.urlencoded()中间件消费,formidable无法获取完整的请求数据流就会一直等待,最终导致请求无限挂起。
另外你提供的app.js中重复声明了const app = express(),属于冗余代码,建议删除重复声明。

解决方案

方案1:路由级挂载formidable中间件(推荐)

不要全局注册formidable,只在需要处理multipart/form-data的上传路由上单独挂载:

  1. 删除app.js中全局注册的app.use(formidableMiddleware());代码
  2. 在上传图片的路由定义处单独引入中间件,示例:
// 仅上传路由使用formidable
app.post('/upload/profile-pic', formidableMiddleware(), uploadProfilePic)
// 其他普通路由正常定义,不需要加formidable
app.post('/user/update', updateUserData)

该方案完全避免中间件冲突,性能最优。

方案2:配置formidable仅处理form-data类型请求

如果你需要保留全局注册的写法,可以添加配置限制formidable仅处理multipart类型的请求:

// 修改app.js中的全局注册代码
app.use(formidableMiddleware({
  parseOnly: ['multipart/form-data']
}));

配置后formidable遇到非form-data类型的请求会直接跳过解析,交给后续中间件处理,不会出现挂起问题。

内容的提问来源于stack exchange,提问作者Anurag Raghuvanshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:42:01