Skip to content
0

Prisma 异常过滤器

Prisma 异常过滤器是 NestJS 中用于处理 Prisma 相关错误的机制。它允许开发者定义一个统一的错误处理逻辑,从而在应用程序中捕获和处理所有未被捕获的 Prisma 相关异常。

创建 Prisma 异常过滤器

要创建一个 Prisma 异常过滤器,你需要实现 ExceptionFilter 接口,并使用 @Catch() 装饰器来指定要捕获的异常类型。以下是一个简单的 Prisma 异常过滤器的示例:

typescript
import {
  ArgumentsHost,
  Catch,
  ExceptionFilter,
  HttpStatus,
  Logger,
} from "@nestjs/common";
import { Prisma } from "@prisma/client";
import { ERROR_MSG, RESPONSE_CODE } from "src/common/enums";

@Catch(Prisma.PrismaClientKnownRequestError)
export class PrismaFilter implements ExceptionFilter {
  private Logger = new Logger();
  catch(exception: Prisma.PrismaClientKnownRequestError, host: ArgumentsHost) {
    // 打印异常信息
    this.Logger.error(exception);
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<import("express").Response>();
    response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
      code: RESPONSE_CODE.INTERNAL_SERVER_ERROR,
      msg: ERROR_MSG.SERVER_ERROR,
      data: null,
    });
  }
}

在这个示例中,我们创建了一个名为 PrismaExceptionFilter 的 Prisma 异常过滤器。它捕获了 PrismaClientKnownRequestError 异常,并在发生错误时返回一个包含错误信息的 JSON 响应。

使用 Prisma 异常过滤器

要使用 Prisma 异常过滤器,你需要在应用程序的主模块中进行配置。可以通过 app.useGlobalFilters() 方法来注册全局过滤器。以下是如何在 main.ts 文件中注册 Prisma 异常过滤器的示例:

typescript
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { PrismaFilter } from "./common/filters/prisma-exception-filter"; 

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalFilters(new PrismaFilter()); 
  await app.listen(3000);
}
bootstrap();

在这个示例中,我们在应用程序启动时注册了 PrismaFilter 作为全局异常过滤器。这样,所有未处理的 Prisma 相关异常都会被该过滤器捕获并处理。