NestJS 最核心的第一个概念,不是 Controller,也不是 Service,而是 Module。
// src/flights/flights.module.ts
import { Module } from '@nestjs/common';
import { FlightsController } from './flights.controller';
import { FlightsService } from './flights.service';
@Module({
controllers: [FlightsController],
providers: [FlightsService],
})
export class FlightsModule {}你可以把它理解成机场里的一个航站楼:
FlightsModule
├── FlightsController -> 航班服务柜台
└── FlightsService -> 航班调度中心官方文档里 @Module() 主要关心四件事:
imports:引入别的航站楼能力controllers:当前分区的窗口providers:当前分区的内部工作人员exports:把本分区的某些能力开放给别的分区
一个更真实的模块关系:
@Module({
imports: [PassengersModule, AuthModule],
controllers: [FlightsController],
providers: [FlightsService],
exports: [FlightsService],
})
export class FlightsModule {}心智图:
Module
├── 自己管理自己的 controller/provider
├── 默认封装内部实现
├── 只通过 exports 暴露公共能力
└── 用 imports 建立合法依赖这点非常重要:
Module 不是文件夹分类器,而是依赖边界。
如果你把模块边界划不好,后面整个系统就会像机场里所有部门都共用一间办公室一样混乱。