NestJS-Prisma异常处理最佳实践:PrismaClientExceptionFilter使用教程
NestJS-Prisma异常处理最佳实践PrismaClientExceptionFilter使用教程【免费下载链接】nestjs-prismaEasy Prisma support for your NestJS application项目地址: https://gitcode.com/gh_mirrors/ne/nestjs-prismaNestJS-Prisma是一款为NestJS应用提供便捷Prisma支持的工具其中PrismaClientExceptionFilter是处理数据库异常的核心组件。本文将详细介绍如何使用这个过滤器来优雅地捕获和处理Prisma客户端抛出的各种异常帮助开发者构建更健壮的应用程序。什么是PrismaClientExceptionFilterPrismaClientExceptionFilter是NestJS-Prisma库提供的一个异常过滤器专门用于捕获和处理Prisma客户端抛出的PrismaClientKnownRequestError异常。它能够将Prisma特定的错误代码映射为标准的HTTP状态码从而提供一致的错误响应格式。该过滤器的实现位于lib/prisma-client-exception.filter.ts文件中它继承自NestJS的BaseExceptionFilter并通过Catch(Prisma?.PrismaClientKnownRequestError)装饰器指定了要捕获的异常类型。为什么需要异常过滤器在使用Prisma操作数据库时可能会遇到各种错误例如记录不存在P2025唯一约束冲突P2002输入数据无效P2000这些错误会抛出不同的异常如果直接返回给客户端可能包含敏感信息或者格式不一致给前端处理带来困难。PrismaClientExceptionFilter的作用就是统一处理这些异常将其转换为友好的HTTP响应。快速开始基本使用方法要在NestJS应用中使用PrismaClientExceptionFilter只需在main.ts中注册全局过滤器import { PrismaClientExceptionFilter } from nestjs-prisma; import { HttpAdapterHost, NestFactory } from nestjs/core; import { AppModule } from ./app.module; async function bootstrap() { const app await NestFactory.create(AppModule); const { httpAdapter } app.get(HttpAdapterHost); app.useGlobalFilters(new PrismaClientExceptionFilter(httpAdapter)); await app.listen(3000); } bootstrap();这段代码可以在examples/basics/src/main.ts中找到它演示了如何获取HTTP适配器并将其传递给PrismaClientExceptionFilter。高级配置自定义错误映射PrismaClientExceptionFilter提供了默认的错误代码映射但你也可以根据需要自定义映射规则。例如将特定的Prisma错误代码映射到不同的HTTP状态码或自定义错误消息。自定义状态码app.useGlobalFilters(new PrismaClientExceptionFilter(httpAdapter, { P2022: HttpStatus.BAD_REQUEST, // 将P2022错误映射为400 Bad Request }));自定义错误消息app.useGlobalFilters(new PrismaClientExceptionFilter(httpAdapter, { P2022: { statusCode: HttpStatus.BAD_REQUEST, errorMessage: 自定义错误消息 }, }));这些自定义配置的示例可以在lib/prisma-client-exception.filter.ts的注释中找到。在模块中提供过滤器除了在main.ts中使用useGlobalFilters注册全局过滤器外你还可以在模块中通过providePrismaClientExceptionFilter函数来提供过滤器import { Module } from nestjs/common; import { providePrismaClientExceptionFilter } from nestjs-prisma; Module({ providers: [ providePrismaClientExceptionFilter({ P2025: HttpStatus.NOT_FOUND, }), ], }) export class AppModule {}这种方式的示例可以在examples/basics/src/app.module.ts中找到。默认错误代码映射PrismaClientExceptionFilter提供了以下默认的错误代码映射P2000: 请求的数据无效 → 400 Bad RequestP2002: 唯一约束冲突 → 409 ConflictP2025: 记录未找到 → 404 Not Found这些默认映射定义在lib/prisma-client-exception.filter.ts的defaultMapping属性中。在GraphQL应用中使用PrismaClientExceptionFilter同样支持GraphQL应用。当检测到GraphQL上下文时它会返回一个HttpException而不是直接调用super.catch。你可以在examples/graphql/src/main.ts中找到GraphQL应用使用过滤器的示例。总结PrismaClientExceptionFilter是NestJS-Prisma库中处理数据库异常的强大工具。通过使用它你可以统一处理Prisma客户端抛出的异常将Prisma错误代码映射为标准HTTP状态码自定义错误消息和状态码在HTTP和GraphQL应用中都能使用要开始使用只需按照本文介绍的基本方法注册过滤器然后根据需要进行自定义配置。更多详细信息可以参考NestJS-Prisma的官方文档和示例代码。希望本文能帮助你更好地理解和使用PrismaClientExceptionFilter构建更健壮的NestJS应用程序 【免费下载链接】nestjs-prismaEasy Prisma support for your NestJS application项目地址: https://gitcode.com/gh_mirrors/ne/nestjs-prisma创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考