什么是模块化?
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。
假设我们现在需要开发一个商城系统。
可以初步把它划分为下面这样的多个子系统:
- 商品管理
- 用户管理
- 物流管理
- 权限管理
等等......
用户管理 又可以继续细分
- 基本信息管理
- 会员等级管理
等等 ... ...
一个复杂的商城系统就可以用类似的方式拆分成不同的模块,自顶向下,逐步细化。
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 最基本的模块化设计,后面的教程将会涉及到更高级的模块用法。