Модуль с настройкой в Nest
Пусть модуль темы должен знать, из какой папки читать файлы, а строка меняется от окружения к окружению. Записать её прямо в декоратор модуля - значит править код при каждом переносе.
На классе модуля описывают
статический метод, который
возвращает объект с полем
module и нужными списками.
Параметры метода попадают
в useValue провайдера
со строковым токеном. Контроллер
запрашивает токен через
@Inject и отдаёт значение
клиенту.
Покажем на примере постов. Опишем модуль с методом настройки:
import { DynamicModule, Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({})
export class PostsModule {
static register(options: { folder: string }): DynamicModule {
return {
module: PostsModule,
controllers: [PostController],
providers: [
{
provide: 'FOLDER',
useValue: options.folder,
},
],
exports: ['FOLDER'],
};
}
}
Контроллер вернёт строку папки из внедрённого токена:
import { Controller, Get, Inject } from '@nestjs/common';
@Controller('posts')
export class PostController {
folder: string;
constructor(@Inject('FOLDER') folder: string) {
this.folder = folder;
}
@Get()
getFolder(): string {
return this.folder;
}
}
Корневой модуль подключит
результат настройки в списке
imports:
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule.register({ folder: 'posts' })],
})
export class AppModule {}
Передайте имя каталога данных
в модуль WorkersModule
при подключении и верните его
из WorkerController
по строковому токену.