主题
NestJS 项目结构
提示
NestJS 没有强制的项目结构
中大型项目
- NestJS:提供模块化、依赖注入和 HTTP 请求处理能力。
- PostgreSQL:持久化业务数据,并提供事务、约束和关系查询能力。
- Drizzle ORM:使用 TypeScript 定义数据库 Schema,提供类型安全的查询和迁移工具。
- Redis:存储缓存、会话和限流等需要快速访问或具有有效期的数据。
- ...
bash
src/
├── main.ts # 应用入口
├── app.module.ts # 根模块
├── config/ # 应用配置
│ ├── env.schema.ts
│ ├── app.config.ts
│ └── database.config.ts
├── common/ # 跨模块通用能力
│ ├── decorators/
│ ├── exceptions/
│ ├── filters/ # 全局过滤器
│ ├── guards/
│ ├── interceptors/ # 全局拦截器
│ ├── pipes/
│ ├── interfaces/ # 跨模块通用接口
│ ├── constants/ # 跨模块通用常量
│ └── utils/
├── types/ # 全局或第三方 .d.ts 声明,按需创建
│ ├── express.d.ts
│ └── session.d.ts
├── infrastructure/ # 数据库、缓存、日志、存储等内部能力
│ ├── database/ # 数据库基础设施
│ │ ├── database.module.ts
│ │ ├── database.provider.ts
│ │ └── schema/ # Drizzle 数据表定义
│ │ ├── users.schema.ts
│ │ └── index.ts
│ ├── cache/
│ ├── logger/
│ └── storage/
├── integrations/ # 外部服务
│ ├── payment/
│ └── ...
└── modules/ # 按业务域组织的功能模块
├── users/
│ ├── dto/ # users 模块专属 DTO
│ ├── interfaces/ # users 模块专属接口
│ ├── repositories/ # 复杂查询封装,按需创建
│ ├── users.module.ts # users 模块入口
│ ├── users.controller.ts # users 模块控制器
│ └── users.service.ts # users 模块服务
└── ...模块通过 imports 和 exports 使用其他模块公开的 Provider,不直接引用其他模块的内部文件。基础设施和外部集成只提供技术实现,业务规则仍由功能模块负责。
Drizzle 使用 schema/ 定义数据库表,不需要 TypeORM 风格的 entities/。查询简单时,Service 可以直接注入数据库 Provider,不必创建 Repository。
Drizzle 生成的迁移文件通常保留在项目根目录的 drizzle/ 中;Prisma 则使用 prisma/migrations/。迁移目录遵循所选 ORM 和部署工具的约定,不强制放入 src/。
