Nest 动态模块
2024/12/30大约 1 分钟
Nest 动态模块
动态模块是指在运行时动态创建的模块。

创建动态模块
使用如下命令创建一个 ConfigurationModule 和 ConfigurationService。
nest generate module common/configuration
nest generate service common/configuration修改 configuration.module.ts 文件,添加 register 方法,返回一个 DynamicModule 对象。
import { DynamicModule, Module } from '@nestjs/common'
import { ConfigurationService } from './configuration.service'
@Module({})
export class ConfigurationModule {
static register(): DynamicModule {
return {
providers: [ConfigurationService],
module: ConfigurationModule,
global: true // 设置为全局模块
}
}
}调整 configuration.module.ts 文件。
import { DynamicModule, Module } from '@nestjs/common'
import { ConfigurationService } from './configuration.service'
@Module({})
export class ConfigurationModule {
static register(options: { name: string }): DynamicModule {
return {
providers: [
ConfigurationService,
{
provide: 'Name',
useValue: options.name
}
],
exports: [ConfigurationService],
module: ConfigurationModule,
global: true
}
}
}可以通过依赖注入的方式传递参数。
调整 configuration.service.ts 文件,注入的 Name 值。
import { Inject, Injectable } from '@nestjs/common'
@Injectable()
export class ConfigurationService {
constructor(@Inject('Name') private readonly name: string) {}
getName(): string {
return this.name
}
}使用动态模块
在 app.module.ts 文件中,使用 ConfigurationModule.register 方法,传入参数。
import { Module } from '@nestjs/common'
import { AppController } from './app.controller'
import { AppService } from './app.service'
import { ConfigurationModule } from './common/configuration/configuration.module'
@Module({
imports: [ConfigurationModule.register({ name: 'Happier' })],
controllers: [AppController],
providers: [AppService]
})
export class AppModule {}在 app.controller.ts 文件中,注入 ConfigurationService 并调用 getName 方法。
import { Controller, Get } from '@nestjs/common'
import { ConfigurationService } from './common/configuration/configuration.service'
@Controller()
export class AppController {
constructor(private readonly configurationService: ConfigurationService) {}
@Get()
getName(): string {
return this.configurationService.getName()
}
}当我们访问 http://localhost:3000/ 时,会返回 Happier。
