Skip to content

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 { PrismaExceptionFilter } 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 相关异常都会被该过滤器捕获并处理。