返回
揭秘 Nest 中的全局模块与生命周期
后端
2023-12-05 20:53:05
在 NestJS 中,我们可以使用 @Global()
装饰器将模块标记为全局模块。这将允许我们在任何其他模块中导入该模块,而无需显式地导入它。例如,我们可以创建一个名为 SharedModule
的全局模块,其中包含一些我们希望在整个应用程序中使用的服务或组件。
import { Module } from '@nestjs/common';
import { SharedService } from './shared.service';
@Module({
providers: [SharedService],
exports: [SharedService],
})
export class SharedModule {}
现在,我们可以通过在其他模块中导入 SharedModule
来使用其提供的服务或组件。
import { Module } from '@nestjs/common';
import { SharedModule } from '../shared/shared.module';
@Module({
imports: [SharedModule],
})
export class AppModule {}
除了使用 @Global()
装饰器将模块标记为全局模块外,我们还可以使用 @Injectable()
装饰器将类标记为可注入的。这将允许我们在任何地方注入该类。例如,我们可以创建一个名为 UserService
的服务,并使用 @Injectable()
装饰器标记它。
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {}
现在,我们可以通过在其他类中注入 UserService
来使用它。
import { Injectable } from '@nestjs/common';
import { UserService } from './user.service';
@Injectable()
export class UserController {
constructor(private readonly userService: UserService) {}
}
NestJS 还提供了生命周期钩子,允许我们自定义模块的初始化和销毁过程。这些钩子包括 OnInit()
, OnDestroy()
, BeforeApplicationShutdown()
和 AfterApplicationShutdown()
. 我们可以通过实现这些钩子来执行自定义的初始化和销毁逻辑。例如,我们可以创建一个名为 MyModule
的模块,并在其中实现 OnInit()
钩子来打印一条消息。
import { Module } from '@nestjs/common';
@Module({})
export class MyModule {
OnInit() {
console.log('MyModule has been initialized!');
}
}
以上就是 NestJS 中全局模块和生命周期的相关知识。希望本文能帮助您更好地理解和使用 NestJS。