blog
blog copied to clipboard
nestjs模块

要想使用 nest 开发,你必须了解 module ,否则无法下手,也搞不懂模块间的引用逻辑。
如果你不懂 nest 里的模块,可以这样理解:它类似组件化概念里的组件,比如在写 React 时,我们有一个根组件,一个 React 应用由多个组件构成的; 在 nest 应用中,也有一个根模块( app.module, 即上图中的 Application Module ),整个 nest 应用由多个模块和一个根模块构成;
来看一个模块:
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
imports: [],
controllers: [CatsController],
providers: [CatsService],
exports: []
})
export class CatsModule {}
仔细看,当一个类被 @Module 装饰时,那么这个类就是一个模块类。@Module 参数中有 imports、controllers、providers、exports 四个参数,这几个参数的内容,就是该模块的所有。比如 CatsController 和 CatsService 属于同一个应用程序域,那么就应该把它们都归属到一个模块下。
- imports: 引入的模块,当前模块需要使用其他模块的功能,就需要在这里将其他模块引进来
- constrollers: 当前模块中的控制器
- providers: 提供者就是为当前模块提供的功能,一般是 Service 或被 @Injectable() 装饰的类,这些类可以通过 constructor 注入依赖关系,只有 provider 可以在模块中被共享
- exports: 向外部导出 providers 里的提供者(子集),否则即使外部模块引入了当前模块也无法使用providers里的功能
总结一下,一个完整的 Module 由 imports, controllers, providers, exports 构成,模块可以引入其他模块,从而使用跟多功能,也可以导出当前模块的提供者,为其他模块提供服务