什么是模塊化?
模塊化是指解決一個復雜問題時自頂向下逐層把系統劃分成若干模塊的過程,有多種屬性,分別反映其內部特性。
假設我們現在需要開發一個商城系統。
可以初步把它劃分為下面這樣的多個子系統:
- 商品管理
- 用戶管理
- 物流管理
- 權限管理
等等......
用戶管理 又可以繼續細分
- 基本信息管理
- 會員等級管理
等等 ... ...
一個復雜的商城系統就可以用類似的方式拆分成不同的模塊,自頂向下,逐步細化。
Nest 中的模塊化
對應到我們的 Nest 項目中商城系統就是 AppModule
AppModule 就是整個系統的根模塊,其它子模塊都掛載到這個根模塊上,形成一顆樹形結構。
目前我們的 UsersController 是直接掛載到了根模塊,更標準的做法就是我們需要新建一個 UsersModule,
讓 UsersController 掛載到 UsersModule 上,然后把 UsersModule 掛載到 AppModule 根模塊,下面我們就來新建一個 UsersModule:
$ nest g mo users
CREATE /src/users/users.module.ts (82 bytes)
UPDATE /src/app.module.ts (798 bytes)
生成的代碼像下面這樣:
src/users/users.module.ts
import { Module } from '@nestjs/common';
@Module({})
export class UsersModule {}
我們需要把 AppModule 中對 UsersController 和 UsersService 的導入移植到 UsersModule 中,并把 UsersModule 導入到 AppModule,現在它們看起來像下面這樣:
src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from 'app.controller';
import { AppService } from 'app.service';
import { UsersModule } from './users/users.module';
@Module({
imports: [UsersModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
src/users/users.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './services/users.service';
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
我們在 AppModule 的 @Module 裝飾器中使用 imports 指定導入 UsersModule,
然后在 UsersModule 中的 @Module 裝飾中重新導入了 UsersController 和 UsersService。
訪問 http://127.0.0.1:3000/users/33 發現框架依然工作的很好:
{"id":"33","name":"小明","age":18}
本篇只介紹 Nest.js 最基本的模塊化設計,后面的教程將會涉及到更高級的模塊用法。