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

NestJS出现PayloadTooLargeError请求实体过大错误如何解决?

解决方案

根因分析

你遇到的request entity too large报错,是因为自定义的请求体大小限制配置没有生效,核心问题是中间件注册顺序错误:
NestJS 在执行app.init()方法时,就会自动注册内置的默认JSON、urlencoded解析中间件,默认请求体上限是100KB。你把自定义50MB限制的配置放在了app.init()之后,请求会优先触发默认的小容量解析器,直接抛出大小超限错误,后面加的自定义配置根本不会执行。

修复步骤

  1. 创建App实例时先关闭内置的自动bodyParser注册,避免和自定义配置冲突
  2. 将自定义的解析器配置挪到app.init()调用之前

修改后的完整代码如下:

async function bootstrap() {  
  // 关闭默认的bodyParser自动注册
  const app = await NestFactory.create<NestExpressApplication>(AppModule, {
    bodyParser: false
  });
  
  // 提前注册自定义大小限制的解析中间件
  app.use(express.json({limit: "50mb"})) //For JSON requests
  app.use(express.urlencoded({
    limit: "50mb",
    extended: false
  }));

  // app.enableCors({
  //   origin: '*',
  // });

  const config = new DocumentBuilder()
    .setTitle('API client gateway')
    .setDescription('API client gateway full documentation')
    .setVersion('v0.0.1')
    .addTag('')
    .addBearerAuth(
      {
        type: 'http',
        scheme: 'bearer',
        bearerFormat: 'JWT',
        name: 'JWT',
        description: 'Enter JWT token',
        in: 'header',
      },
      'jwt-token',
    )
    .build();

  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('/api/docs', app, document);

  await app.init();
  await app.listen(AppConfig.Port);
}

bootstrap();

额外注意事项

  • 若你的服务前端还有Nginx、SLB等反向代理服务,需要同步调整代理层的请求体大小限制,比如Nginx要配置client_max_body_size 50m;,否则请求会在代理层直接被拦截。
  • base64编码会比原始二进制体积大33%左右,你的2MB base64请求体实际对应原始文件约1.5MB,配置50MB的上限完全可以覆盖需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:04