# 全局模块

nest.js 项目一般由各个模块组成,如果一个模块 A 需要使用到模块 B 中的 provider,那么需要在模块 B 中导出对应的 provider,
同时还需要在模块 A 中导入模块 B,这样才能使用模块 B 的 provider

AaaModule导出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 {}
BbbModule导入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 装饰器将其作为全局模块,这样全局模块对所有其他模块均可见,不再需要导入模块了

@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 {}
其他模块不再需要imports导入了
import { Module } from '@nestjs/common';
import { BbbService } from './bbb.service';
import { BbbController } from './bbb.controller';
@Module({
  imports: [],
  controllers: [BbbController],
  providers: [BbbService],
})
export class BbbModule {}

# 启动时的生命周期

nest.js启动时生命周期流程

在启动过程中,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');
  }
  ...
}

# 结束时的生命周期

nest.js结束时生命周期流程

在结束过程中,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');
  }
  ...
}
更新于 阅读次数