Configuration asynchrone
Lorsque vous devez passer les options du module de manière asynchrone plutôt que statique, utilisez la méthode .forRootAsync(). Comme pour la plupart des modules dynamiques, Nest fournit plusieurs techniques pour gérer la configuration asynchrone.
Une technique consiste à utiliser une fonction factory :
import { NecordModule } from 'necord';
import { Module } from '@nestjs/common';
import { IntentsBitField } from 'discord.js';
@Module({
imports: [
NecordModule.forRootAsync({
useFactory: () => ({
token: 'DISCORD_BOT_TOKEN',
intents: [
IntentsBitField.Flags.Guilds,
IntentsBitField.Flags.GuildMessages,
IntentsBitField.Flags.DirectMessages
]
})
})
]
})
export class AppModule {}
Comme les autres providers de type factory, notre fonction factory peut être asynchrone et peut injecter des dépendances via inject.
import { ConfigModule, ConfigService } from '@nestjs/config';
import { Module } from '@nestjs/common';
import { IntentsBitField } from 'discord.js';
import { NecordModule, NecordModuleOptions } from 'necord';
@Module({
imports: [
NecordModule.forRootAsync({
imports: [ConfigModule.forRoot()],
useFactory: (configService: ConfigService): NecordModuleOptions => ({
token: configService.getOrThrow<string>('DISCORD_BOT_TOKEN'),
intents: [
IntentsBitField.Flags.Guilds,
IntentsBitField.Flags.GuildMessages,
IntentsBitField.Flags.DirectMessages
]
}),
inject: [ConfigService]
})
]
})
export class AppModule {}
Vous pouvez également configurer le NecordModule à l'aide d'une classe plutôt que d'une factory, comme indiqué ci-dessous :
import { NecordModule } from 'necord';
import { Module } from '@nestjs/common';
import { NecordConfigService } from './discord-config.service';
@Module({
imports: [
NecordModule.forRootAsync({
useClass: NecordConfigService
})
]
})
export class AppModule {}
La construction ci-dessus instancie NecordConfigService à l'intérieur du NecordModule, en l'utilisant pour créer l'objet d'options requis. The class must expose a createNecordOptions() method returning NecordModuleOptions; NecordModule calls this method on the supplied class.
import { Injectable } from '@nestjs/common';
import { NecordModuleOptions } from 'necord';
import { IntentsBitField } from 'discord.js';
@Injectable()
export class NecordConfigService {
public createNecordOptions(): NecordModuleOptions {
return {
token: 'DISCORD_BOT_TOKEN',
intents: [
IntentsBitField.Flags.Guilds,
IntentsBitField.Flags.GuildMessages,
IntentsBitField.Flags.DirectMessages
]
};
}
}
Si vous souhaitez réutiliser un provider d'options existant plutôt que d'en créer une copie privée à l'intérieur du NecordModule, utilisez la syntaxe useExisting.