全书目录

第七篇:NestJS 完全指南 —— 国际机场总调度宇宙

第四章:Module —— 航站楼不是装饰,它是系统分区

1 分钟 274 字 第 184 / 962 个阅读单元

NestJS 最核心的第一个概念,不是 Controller,也不是 Service,而是 Module

ts
// 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 {}

你可以把它理解成机场里的一个航站楼:

text
FlightsModule
├── FlightsController   -> 航班服务柜台
└── FlightsService      -> 航班调度中心

官方文档里 @Module() 主要关心四件事:

  • imports:引入别的航站楼能力
  • controllers:当前分区的窗口
  • providers:当前分区的内部工作人员
  • exports:把本分区的某些能力开放给别的分区

一个更真实的模块关系:

ts
@Module({
  imports: [PassengersModule, AuthModule],
  controllers: [FlightsController],
  providers: [FlightsService],
  exports: [FlightsService],
})
export class FlightsModule {}

心智图:

text
Module
├── 自己管理自己的 controller/provider
├── 默认封装内部实现
├── 只通过 exports 暴露公共能力
└── 用 imports 建立合法依赖

这点非常重要:

Module 不是文件夹分类器,而是依赖边界。

如果你把模块边界划不好,后面整个系统就会像机场里所有部门都共用一间办公室一样混乱。