Фабрика провайдера в Nest
Значение для страницы может зависеть от окружения или настроек приложения. Хранить эту логику в контроллере неудобно: её лучше выполнить один раз при старте модуля.
Приём useFactory задаёт
функцию, которая возвращает
готовое значение. В массиве
inject перечисляют
зависимости фабрики - часто
ConfigService из модуля
настроек. Корневой модуль
подключает ConfigModule.forRoot
в том же @Module.
Покажем на примере постов. Подключим настройки и опишем фабрику, которая читает строку из конфигурации:
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { PostController } from './post.controller.js';
@Module({
imports: [ConfigModule.forRoot()],
controllers: [PostController],
providers: [
{
provide: 'POSTS',
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
return (
configService.get<string>('POSTS_LABEL') ??
'Posts from config'
);
},
},
],
})
export class AppModule {}
Контроллер получит строку по токену и вернёт её клиенту:
import { Controller, Get, Inject } from '@nestjs/common';
@Controller('posts')
export class PostController {
label: string;
constructor(@Inject('POSTS') label: string) {
this.label = label;
}
@Get()
getPosts(): string {
return this.label;
}
}
Соберите подпись списка
работников фабрикой с
ConfigService
и отдайте её из
WorkerController.