添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在传给后端接口的数据,是一个超过1.5mb的json字符串,通过nest filter的时候直接被拦截掉了,返回【 请求体太长】的错误。 在这里插入图片描述

还没有到达contraller,就直接被框架拦截掉了,

import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { HttpAdapterHost } from '@nestjs/core';
import { ErrorCode } from '../shared/constants';
export class CommonException extends Error {
  constructor(public code: number, public message: string) {
    super();
@Catch()
export class UncaughtExceptionFilter implements ExceptionFilter {
  constructor(private readonly httpAdapterHost: HttpAdapterHost) {}
  catch(exception: Error | CommonException, host: ArgumentsHost): void {
    const ctx = host.switchToHttp();
    const { httpAdapter } = this.httpAdapterHost;
    const { message = 'Internal Server Error' } = exception;
    const responseBody = {
      result_code: 500, // TODO: remove it
      result_message: message, // TODO: remove it
      code:
        exception instanceof CommonException
          ? exception.code
          : ErrorCode.UNCAUGHT_EXCEPTION, // 100
      msg: message,
    httpAdapter.reply(ctx.getResponse(), responseBody, 200);

1、参考这个解决方案,Nest.js - request entity too large PayloadTooLargeError: request entity too large,引入bodyParser修改配置即可。(默认配置是比较小的)

import * as bodyParser from 'body-parser';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.use(bodyParser.json({limit: '50mb'}));
  app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
  await app.listen(3000);
bootstrap();

2、对我这个场景来说,传给后端的数据是可控的,所以我们可以考虑自行把新旧数据进行比对,只把被修改的数据传给后端即可。

@nestjs/core下有两个ExceptionsHandler,其中errors目录下的单纯输出错误日志,exceptions下的则用来创建路由方法的异常捕捉方法 @nestjs/core/exceptions/exceptions-handler.ts import { HttpException as DeprecatedHttpException } from './http-exc
一般来说是服务器使用nginx作为反向代理出现的问题,post请求长度超过了nginx默认的缓存大小和最大客户端最大请求大小。解决方式如下,更该nginx代理配置: 在nginx.conf配置文件中,找到http{}代码块,添加如下配置 client_max_body_size 20m; 重启nginx即可。
HTTP请求报错"Request Entity Too Large"意味着请求实体大,超过服务器所允许的限制。这个错误通常由服务器配置引起,用来限制请求的大小,以防止恶意攻击或滥用服务器资源。 这个错误可能有几个原因: 1. 服务器配置问题:服务器可能配置了一个请求大小的限制,超过这个限制会导致请求被拒绝。可以通过修改服务器配置文件来增加允许的请求大小。 2. 网络传输问题:在上传大文件时,可能存在网络传输问题,例如传输速度过慢或连接中断,导致请求未完整发送到服务器。这可能导致服务器接收到的请求实体大小不符合预期,从而触发错误。 3. 代理服务器限制:如果请求经过代理服务器,代理服务器也可能设置了请求大小的限制,超过限制会导致请求被拒绝。可以尝试绕过代理服务器或联系代理服务器管理员解决问题。 解决方法: 1. 修改服务器配置:可以在服务器配置文件中增加或修改相关配置项,以增加允许的请求大小限制。 2. 分块上传:可以将大文件拆分成多个较小的部分进行上传,每次只上传一部分数据,然后在服务器端重新组合。 3. 压缩请求实体:使用压缩算法对请求实体进行压缩,减小请求的大小,以满足服务器的限制。