nest.js学习 - 全局模块和生命周期
全局模块
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 {}
启动时的生命周期
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');
}
...
}