Необязательный провайдер в Nest
Зависимость может быть не зарегистрирована: модуль собран без неё, а контроллер должен всё равно ответить клиенту предсказуемым текстом.
Пометка @Optional рядом
с @Inject говорит Nest,
что провайдер можно не находить.
Тогда в параметр попадёт
undefined. Метод страницы
проверяет значение и отдаёт
запасную фразу,
если данных нет.
Покажем на примере постов. Модуль подключит только контроллер, без провайдера массива:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({
controllers: [PostController],
providers: [],
})
export class AppModule {}
Контроллер запросит массив как необязательный и вернёт запасной текст, если его нет:
import {
Controller,
Get,
Inject,
Optional,
} from '@nestjs/common';
@Controller('posts')
export class PostController {
posts: string[] | undefined;
constructor(
@Optional() @Inject('POSTS') posts: string[] | undefined,
) {
this.posts = posts;
}
@Get()
getPosts(): string {
if (this.posts === undefined) {
return 'No posts configured';
}
return this.posts.join(', ');
}
}
Сделайте список работников
необязательной зависимостью
в WorkerController
и верните запасную фразу,
если провайдера нет.