学习 NestJS 时,有一套系统性的基础知识必须掌握,这些基础会帮助你理解 NestJS 的整体架构,写出优雅、可维护、可扩展的后端应用。
以下是分模块的 NestJS 学习基础内容清单,并附带简单说明:
🧱 一、核心概念(必懂)
1. 模块(Module)
- 每个功能区域都需要定义在模块中,类似于“房间”或“子系统”。
- 使用
@Module()装饰器。 - 每个应用都必须有一个
AppModule。
@Module({
imports: [],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
2. 控制器(Controller)
- 处理外部请求(HTTP、WebSocket 等)。
- 使用
@Controller()装饰器。 - 每个路由的逻辑入口。
@Controller('cats')
export class CatsController {
@Get()
findAll() {}
}
3. 服务(Service)
- 核心业务逻辑编写的地方。
- 通常作为 Provider 注册,可以被注入到 Controller 或其他 Service 中。
@Injectable()
export class CatsService {
getCats() {}
}
4. 提供者(Provider)
- 上面讲过,是注入的核心对象,用来封装可复用的逻辑。
- 通过 DI(依赖注入)机制进行连接。
5. 依赖注入(DI)
- NestJS 的灵魂:将一个类的依赖自动注入到它的构造函数中,省去手动创建对象的麻烦。
🔧 二、路由与请求处理
1. 请求方法装饰器
@Get(),@Post(),@Put(),@Delete(),@Patch()
2. 参数装饰器
@Param(),@Query(),@Body(),@Headers(),@Req(),@Res()
📦 三、中间件与管道、守卫等机制
1. 中间件(Middleware)
- 类似 Express 的中间件。
- 在请求到达路由处理前拦截处理。
2. 守卫(Guard)
- 用来做权限校验(是否登录、角色是否匹配等)。
- 使用
@UseGuards()装饰器。
3. 拦截器(Interceptor)
- 用来对请求/响应做包装,比如统一响应结构、日志等。
4. 管道(Pipe)
- 数据转换、验证的地方。可以对传入的参数进行格式化、校验等。
🧩 四、常用模块和功能
1. 配置模块(@nestjs/config)
- 读取
.env配置。 - 推荐使用 ConfigService 做环境变量管理。
2. 全局异常过滤器
- 自定义异常处理逻辑,统一错误格式返回。
3. 日志系统(Logger)
- 使用
Logger类进行日志打印或扩展。
4. 数据库集成
- 常配合 TypeORM、Prisma 等 ORM 使用。
@Module({
imports: [TypeOrmModule.forRoot({ /* db config */ })],
})
⚙️ 五、项目结构规范(建议)
- 每个模块一个文件夹(模块化)。
- 控制器、服务、DTO、实体、接口分开存放。
- 建议使用
main.ts作为入口,启动 Nest 应用。
📚 六、辅助技能建议掌握
- TypeScript(强烈建议先熟练 TS)
- Express 基础(Nest 底层默认使用 Express)
- Promise / async-await 异步处理
- 类装饰器和构造函数的概念
- JSON 和 RESTful API 基础
🗂️ 七、可选进阶内容
- 自定义装饰器
- 自定义 Provider
- 生命周期钩子(
OnModuleInit,OnModuleDestroy) - 微服务(使用
@nestjs/microservices) - GraphQL 支持
- WebSocket 网关
- Swagger 文档集成
✅ 推荐学习顺序建议
- NestJS 架构理解(模块、控制器、服务、提供者)
- 路由 + 请求参数处理
- 依赖注入机制
- 中间件、守卫、拦截器、管道
- 配置管理与环境变量
- 数据库集成(Prisma 或 TypeORM)
- 测试、部署、日志、错误处理等