Nestjs dynamic module, встроенн с forRoot в root module(AppModule). Как сделать inject в child modules?
У меня есть динамический модуль, настроенный в разделе импорта AppModule путем передачи параметров в метод forRoot. Позже я хочу использовать сервис этого модуля в нескольких моих дочерних модулях. Но как предоставить этот настроенный экземпляр этим модулям?
Я могу использовать декоратор @Global для этого динамического модуля, и тогда служба внутри него будет доступна всем модулям. Но вместо этого я хочу предоставить его только нескольким модулям.
@Module({})
@Global()
export class JwtModule {
static forRoot(options: JwtModuleOptions): DynamicModule {
return {
module: JwtModule,
providers: [
{
provide: CONFIG_OPTIONS,
useValue: options,
},
JwtService,
],
exports: [JwtService],
};
}
}
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.env.${process.env.ENV}`,
ignoreEnvFile: process.env.ENV === 'prod',
validationSchema: Joi.object({
ENV: Joi.string().valid('dev', 'prod', 'test'),
DB_NAME: Joi.string().required(),
TOKEN_SECRET: Joi.string().required(),
}),
}),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
}),
TypeOrmModule.forRoot({
type: 'sqlite',
database: process.env.DB_NAME,
synchronize: process.env.ENV !== 'prod',
logging: true,
entities: [User],
}),
UsersModule,
CommonModule,
JwtModule.forRoot({
tokenSecret: process.env.TOKEN_SECRET,
}),
],
})
export class AppModule {}
@Module({
imports: [
TypeOrmModule.forFeature([User]),
// JwtModule.forRoot({ tokenSecret: process.env.TOKEN_SECRET }),
],
providers: [UserService, UserResolver],
})
export class UsersModule {}