РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpDmAO 17 of 201 menu
◀ ▶

Асинхронная настройка модуля в Nest

Пусть строка папки лежит в файле окружения, а модуль темы должен получить её только после старта приложения. Передавать значение вручную в корне уже неудобно.

Рядом с синхронной настройкой заводят асинхронный статический метод на том же классе модуля. В возвращаемом объекте в imports указывают ConfigModule, в провайдере пишут useFactory с массивом inject для ConfigService. Корень подключает ConfigModule.forRoot и результат асинхронной сборки.

Покажем на примере постов. Запишем ключ в окружение:

POSTS_FOLDER=posts

Добавим асинхронный метод настройки в модуль темы:

import { DynamicModule, Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { PostController } from './post.controller.js'; @Module({}) export class PostsModule { static registerAsync(): DynamicModule { return { module: PostsModule, imports: [ConfigModule], controllers: [PostController], providers: [ { provide: 'FOLDER', inject: [ConfigService], useFactory: (configService: ConfigService) => { return ( configService.get<string>('POSTS_FOLDER') ?? 'posts' ); }, }, ], exports: ['FOLDER'], }; } }

Корневой модуль включит чтение настроек и асинхронное подключение темы:

import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [ ConfigModule.forRoot(), PostsModule.registerAsync(), ], }) export class AppModule {}

Соберите имя каталога работников из ConfigService в асинхронной настройке WorkersModule и отдайте его из WorkerController.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить