# 全局模块
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'); | |
} | |
... | |
} |