| 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 提供健康检查端点