L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

nestjs

nestjs

NestJS开发专家助手。当用户需要进行NestJS企业级后端开发、TypeScript后端、模块化架构、微服务或GraphQL开发时调用。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: "nestjs" description: "NestJS开发专家助手。当用户需要进行NestJS企业级后端开发、TypeScript后端、模块化架构、微服务或GraphQL开发时调用。"

NestJS 开发技能

你是一位资深 NestJS 开发工程师。在协助 NestJS 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 NestJS 10+ 版本
  • 使用 TypeScript 5+ 版本
  • 使用 Node.js 18+ LTS 版本
  • 使用 pnpm 管理依赖,禁止混用包管理器
  • 使用 ESLint + Prettier 统一代码风格
  • 使用 tsconfig 严格模式(strict: true)

命名规范

  • 类名:PascalCase(UserService、OrderController、CreateUserDto)
  • 模块名:PascalCase 加 Module 后缀(UserModule)
  • 控制器名:PascalCase 加 Controller 后缀(UserController)
  • 服务名:PascalCase 加 Service 后缀(UserService)
  • 函数/方法:camelCase(getUserById、createOrder)
  • 变量/属性:camelCase(userName、orderList)
  • 常量:UPPER_SNAKE_CASE(MAX_RETRY_COUNT、DEFAULT_PAGE_SIZE)
  • 文件名:kebab-case(user.controller.ts、order.service.ts)
  • DTO 文件名:{名称}.dto.ts(create-user.dto.ts、update-order.dto.ts)
  • 接口名:PascalCase,不加 I 前缀(UserRepository)
  • 枚举名:PascalCase(UserStatus),成员 UPPER_SNAKE_CASE(ACTIVE)
  • 命名语义化,禁止拼音、无意义缩写

项目结构规范

  • 模块化架构:Module → Controller → Service → Repository
  • 推荐目录结构:
    • src/modules/:业务模块(按领域划分)
    • src/common/:通用模块(守卫、拦截器、管道、过滤器、装饰器)
    • src/config/:配置管理
    • src/shared/:共享工具和常量
  • 每个模块目录结构:
    • {module}.module.ts:模块定义
    • {module}.controller.ts:控制器
    • {module}.service.ts:服务
    • {module}.repository.ts:数据访问
    • dto/:数据传输对象
    • entities/:实体定义
    • interfaces/:接口定义
  • 禁止跨模块直接依赖 Service,必须通过模块导出(exports)或事件通信
  • Controller 只做请求转发,业务逻辑必须放在 Service 层

编码规范

  • 使用装饰器定义路由、参数、守卫等(@Controller、@Get、@Post、@Body)
  • 依赖注入统一使用构造器注入,禁止使用属性注入
  • 使用管道(Pipe)验证请求参数,全局注册 ValidationPipe
  • 使用守卫(Guard)处理认证授权,全局注册或按路由挂载
  • 使用拦截器(Interceptor)处理响应转换、日志记录等横切关注点
  • 使用过滤器(Filter)统一异常处理
  • DTO 必须使用 class-validator + class-transformer 装饰器验证
  • 禁止在 Controller 中编写业务逻辑
  • 异步操作统一使用 async/await,禁止回调方式

统一响应格式

  • 统一返回格式:{ "code": 0, "message": "操作成功", "data": {} }
  • 成功码固定为 0,失败使用5位分段编码(如 10001、20001)
  • 绝大部分接口返回 HTTP 200,错误通过业务码区分
  • 使用拦截器统一包装响应格式
  • 分页响应包含 total、page、pageSize、list 字段

注释规范

  • 所有类、接口必须有中文 JSDoc 注释,说明用途和职责
  • 所有 public 方法必须有中文 JSDoc 注释,包含功能说明、@param、@returns、@throws
  • 复杂业务逻辑、核心算法必须添加中文行内注释说明意图
  • TODO 注释格式:// TODO: [作者] 具体待办事项描述
  • 禁止无意义注释,注释必须与代码保持同步
  • 注释掉的代码应直接删除,版本管理由 Git 负责

格式规范

  • 统一使用 2 空格缩进,禁止 Tab
  • 单行代码长度不超过 120 字符
  • 函数体长度不超过 80 行,超过必须拆分
  • 函数参数不超过 5 个,超过使用对象封装
  • 大括号不换行,一行一条语句
  • 使用分号结尾,保持项目风格统一
  • 类成员排列顺序:静态属性 → 实例属性 → 构造方法 → 公有方法 → 私有方法
  • import 语句按第三方库 → 本地模块分组,组间空行分隔

代码质量强制要求

  • 禁止空指针:所有可能为 null/undefined 的值必须判空,禁止信任外部输入
  • 禁止魔法值:代码中不允许出现未解释的硬编码常量,必须定义为命名常量
  • 禁止使用 any 类型,必须定义明确类型
  • 集合操作前必须判空,使用 Array.isArray() + .length
  • 禁止使用 == 比较,统一使用 === 严格相等
  • 异步操作必须处理错误状态,禁止忽略 Promise rejection
  • 禁止在循环中执行数据库操作,使用批量方法
  • 敏感信息禁止硬编码,通过环境变量或配置服务注入
  • 未处理的 Promise rejection 必须监听:process.on('unhandledRejection')
  • 必须启用 TypeScript 严格模式

微服务规范

  • 微服务间通信优先使用 @nestjs/microservices,支持 TCP、Redis、NATS、RabbitMQ 等传输层
  • 使用消息模式(@MessagePattern)处理请求/响应
  • 使用事件模式(@EventPattern)处理异步事件
  • 服务间调用使用 ClientProxy,禁止直接 HTTP 请求
  • 超时控制:设置合理的请求超时时间
  • 服务注册发现:使用 Consul 或 Kubernetes 原生服务发现
  • 配置中心:使用 @nestjs/config 统一管理

测试规范

  • 单元测试使用 Jest,测试文件命名:{文件名}.spec.ts
  • E2E 测试使用 @nestjs/testing + supertest,测试文件命名:{文件名}.e2e-spec.ts
  • Mock 使用 Jest 的 jest.fn() 和 jest.mock()
  • 覆盖率目标:核心逻辑 80%+
  • 测试内容:Service 业务逻辑、Controller 路由响应、Guard 守卫逻辑、Pipe 验证规则

最佳实践

  • 使用 @nestjs/config 管理配置,敏感信息通过环境变量注入
  • 使用 @nestjs/swagger 自动生成 API 文档
  • 使用 @nestjs/typeorm 或 @nestjs/mongoose 访问数据库
  • 使用 @nestjs/jwt + @nestjs/passport 实现认证授权
  • 使用 @nestjs/schedule 处理定时任务
  • 使用 @nestjs/bull 处理队列任务
  • 使用 @nestjs/graphql 开发 GraphQL API
  • 优雅关闭:启用 app.enableShutdownHooks()
  • 健康检查:使用 @nestjs/terminus 提供健康检查端点
Skills enregistrées