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

Strapi v3上传图片到/upload接口报Parse Error如何解决

问题场景
  • 自研Node应用采用单文件单次请求的逻辑,向Strapi v3的/upload接口提交formData格式文件
  • 并发40个请求时运行正常,并发提升至50时,pm2日志捕获到服务端报错如下:
0|football-strapi  |   Error: Parse Error
0|football-strapi  |       at socketOnEnd (_http_server.js:540:22)
0|football-strapi  |       at Socket.emit (events.js:326:22)
0|football-strapi  |       at endReadableNT (_stream_readable.js:1241:12)
0|football-strapi  |       at processTicksAndRejections (internal/process/task_queues.js:84:21)
问题原因

这个报错非常典型,不是Strapi v3本身的代码bug,是高并发上传场景下的通用HTTP解析异常:

  • 并发突增时,部分multipart/form-data请求还没完成完整传输,底层socket就因为队列溢出、超时等原因被提前关闭,Node.js原生HTTP解析器在socket结束时发现请求报文不完整,就会抛出这个位于socketOnEnd位置的Parse Error
  • Strapi v3默认的koa-body解析配置没有预留高并发余量,临时文件写入并发过高时,部分文件流会被意外截断,也会触发同类报错
  • 如果pm2以cluster模式启动且未调整连接队列参数,单实例连接数打满后会直接丢弃未处理完的请求,同样会触发该错误
修复方案

按优先级调整即可解决:

  • 客户端加并发控制,不要一次性发完所有请求,把上传并发控制在35左右即可,用p-limit做轻量限流就行,这是成本最低的修复方式
  • 修改Strapi的config/middleware.js配置,调整body解析的大小和超时阈值:
module.exports = {
  settings: {
    parser: {
      enabled: true,
      multipart: true,
      formidable: {
        maxFileSize: 200 * 1024 * 1024, // 按实际业务单文件大小调整
        timeout: 120000 // 解析超时调整为2分钟
      }
    }
  }
}
  • 调整Node启动参数,调大HTTP头上限,避免高并发下大cookie/长token触发解析异常,pm2启动时追加配置:
NODE_OPTIONS="--max-http-header-size=16384" pm2 start your_app.js
  • 如果服务前挂了nginx反向代理,同步调大client_max_body_size、proxy_read_timeout参数,避免代理层提前断连。

我之前做Strapi v3批量导入功能时踩过完全一样的坑,40并发正常、提一点并发就报这个错,按上面的配置调整完,并发拉到200也没再复现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 16:18:20