SuperAPI AI 工具集

nestjs-best-practices

编程与开发

查看项目

更新于 10-15 21:37

技能介绍

用途:该技能面向 NestJS 11+ 与 TypeScript 的企业级 Node.js 应用,适用于编写、审查或重构 NestJS 控制器、服务等代码时参考最佳实践。资料以“快速参考”形式按主题列出对应的参考文档:核心架构(模块、Provider、依赖注入、forwardRef、自定义装饰器)、请求生命周期(中间件、守卫、拦截器、管道、过滤器)、验证与管道(DTO、class-validator、ValidationPipe、转换)、认证(JWT、Passport、守卫、Local/OAuth 策略、RBAC)、数据库(TypeORM、Prisma、Drizzle ORM、仓储模式)、测试(单元测试、E2E 测试、mock Provider)、OpenAPI 与 GraphQL(Swagger 装饰器、resolver、订阅)、微服务(TCP、Redis、NATS、Kafka 模式)。

主要能力与模式:展示模块与 Provider 组织方式(@Module 中 exports 导出 Provider 供其他模块使用);控制器结合 DTO 与 ParseIntPipe 等内容;DTO 使用 class-validator 的 @IsEmail、@IsString、@MinLength、@IsOptional 等装饰器;异常过滤器实现 ExceptionFilter 并返回 statusCode、message、timestamp;JWT 守卫继承 AuthGuard('jwt')。

NestJS 11 破坏性变更:Express v5 中通配符必须命名(如 *splat),可选参数使用花括号 /:file{.:ext};要求 Node.js 20+;Fastify v5 适配器更新;动态模块使用相同配置多次导入会产生独立实例。

常见错误:循环依赖未使用 forwardRef() 会导致无法解析依赖;抛出普通错误而非 HttpException 会丢失状态码并破坏异常过滤器,应使用 throw new BadRequestException('message');缺少 @Injectable() 装饰器会导致 Provider 无法注入;全局 ValidationPipe 未设置 whitelist: true 会允许意外属性,应设置 whitelist: true 与 forbidNonWhitelisted: true;跨模块共享应导出 Provider 而非导入模块;异步配置未使用 ConfigModule.forRoot() 会导致 ConfigService 未定义;单元测试未使用 overrideProvider() 会调用真实服务,应使用 overrideProvider(Service).useValue(mock);E2E 测试共享数据库状态缺乏隔离,应使用事务或在 beforeEach 中清空表。

使用方式:资料未提供具体安装命令或调用步骤,暂未提供。

限制:内容基于公开资料中列出的参考文档与代码片段,未提供完整文档正文、版本细节或适用范围之外的说明。