# 全局模块
nest.js 项目一般由各个模块组成,如果一个模块 A 需要使用到模块 B 中的 provider,那么需要在模块 B 中导出对应的 provider,
同时还需要在模块 A 中导入模块 B,这样才能使用模块 B 的 provider
| import { Global, Module } from '@nestjs/common'; | |
| import { AaaService } from './aaa.service'; | |
| import { AaaController } from './aaa.controller'; | |
| @Module({ | |
| controllers: [AaaController], | |
| providers: [AaaService], | |
| exports: [AaaService], // 导出的 provider | |
| }) | |
| export class AaaModule {} | 
| import { Module } from '@nestjs/common'; | |
| import { BbbService } from './bbb.service'; | |
| import { BbbController } from './bbb.controller'; | |
| import { AaaModule } from 'src/aaa/aaa.module'; | |
| @Module({ | |
| imports: [AaaModule], | |
| controllers: [BbbController], | |
| providers: [BbbService], | |
| }) | |
| export class BbbModule {} | 
但是如果一个模块被多个其他模块所依赖,这样一个一个导入会显得很麻烦,
因此需要使用 @Global 装饰器将其作为全局模块,这样全局模块对所有其他模块均可见,不再需要导入模块了
| import { Global, Module } from '@nestjs/common'; | |
| import { AaaService } from './aaa.service'; | |
| import { AaaController } from './aaa.controller'; | |
| @Global() // | |
| @Module({ | |
| controllers: [AaaController], | |
| providers: [AaaService], | |
| exports: [AaaService], // 导出的 provider | |
| }) | |
| export class AaaModule {} | 
| import { Module } from '@nestjs/common'; | |
| import { BbbService } from './bbb.service'; | |
| import { BbbController } from './bbb.controller'; | |
| @Module({ | |
| imports: [], | |
| controllers: [BbbController], | |
| providers: [BbbService], | |
| }) | |
| export class BbbModule {} | 
# 启动时的生命周期

在启动过程中,onModuleInit 和 onApplicationBootstrap 都是我们可以实现的生命周期方法
nest.js 提供了对应的接口 OnModuleInit 和 OnApplicationBootstrap
| ... | |
| @Controller('ccc') | |
| export class CccController | |
|   implements | |
| OnModuleInit, | |
| OnApplicationBootstrap, | |
| { | |
| constructor(private readonly cccService: CccService) {} | |
| onModuleInit() { | |
| console.log('CccController onModuleInit'); | |
|   } | |
| onApplicationBootstrap() { | |
| console.log('CccController onApplicationBootstrap'); | |
|   } | |
|   ... | |
| } | 
# 结束时的生命周期

在结束过程中,onModuleDestroy 和 beforeApplicationShutdown 以及 onApplicationShutdown 都是我们可以实现的生命周期方法
nest.js 提供了对应的接口 OnModuleDestroy 和 BeforeApplicationShutdown 以及 OnApplicationShutdown
| @Controller('ccc') | |
| export class CccController | |
|   implements | |
| OnModuleDestroy, | |
| BeforeApplicationShutdown, | |
|     OnApplicationShutdown | |
| { | |
| constructor(private readonly cccService: CccService) {} | |
| onModuleDestroy() { | |
| console.log('CccController onModuleDestroy'); | |
|   } | |
| beforeApplicationShutdown(signal?: string) { | |
| console.log('CccController beforeApplicationShutdown'); | |
|   } | |
| onApplicationShutdown(signal?: string) { | |
| console.log('CccController onApplicationShutdown'); | |
|   } | |
|   ... | |
| } | 
