什么是模塊化碗脊?
模塊化是指解決一個復(fù)雜問題時自頂向下逐層把系統(tǒng)劃分成若干模塊的過程,有多種屬性橄妆,分別反映其內(nèi)部特性衙伶。
假設(shè)我們現(xiàn)在需要開發(fā)一個商城系統(tǒng)。
可以初步把它劃分為下面這樣的多個子系統(tǒng):
- 商品管理
- 用戶管理
- 物流管理
- 權(quán)限管理
等等......
用戶管理 又可以繼續(xù)細(xì)分
- 基本信息管理
- 會員等級管理
等等 ... ...
一個復(fù)雜的商城系統(tǒng)就可以用類似的方式拆分成不同的模塊害碾,自頂向下矢劲,逐步細(xì)化。
Nest 中的模塊化
對應(yīng)到我們的 Nest 項目中商城系統(tǒng)就是 AppModule
AppModule 就是整個系統(tǒng)的根模塊慌随,其它子模塊都掛載到這個根模塊上芬沉,形成一顆樹形結(jié)構(gòu)躺同。
目前我們的 UsersController 是直接掛載到了根模塊,更標(biāo)準(zhǔn)的做法就是我們需要新建一個 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 的導(dǎo)入移植到 UsersModule 中黄刚,并把 UsersModule 導(dǎo)入到 AppModule捎谨,現(xiàn)在它們看起來像下面這樣:
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 指定導(dǎo)入 UsersModule,
然后在 UsersModule 中的 @Module 裝飾中重新導(dǎo)入了 UsersController 和 UsersService憔维。
訪問 http://127.0.0.1:3000/users/33 發(fā)現(xiàn)框架依然工作的很好:
{"id":"33","name":"小明","age":18}
本篇只介紹 Nest.js 最基本的模塊化設(shè)計涛救,后面的教程將會涉及到更高級的模塊用法。