# 全局模块
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], |
| }) |
| 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], |
| }) |
| 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 {} |
# 启动时的生命周期
在启动过程中,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'); |
| } |
| |
| ... |
| } |