Токен провайдера в Nest
Строковый токен прост, но легко ошибиться в написании и сложнее держать тип значения рядом с регистрацией провайдера.
InjectionToken - объект-токен
с типом значения. Его создают
один раз, передают в provide
и в @Inject. Так зависимость
видна и в модуле, и в контроллере
без «магических» строк.
Покажем на примере постов. Объявим токен и массив в модуле:
import { InjectionToken } from '@nestjs/common';
export const POSTS = new InjectionToken<string[]>('POSTS');
Подключим провайдер с этим токеном и контроллер:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
import { POSTS } from './posts.token.js';
@Module({
controllers: [PostController],
providers: [
{
provide: POSTS,
useValue: ['First post', 'Second post'],
},
],
})
export class AppModule {}
Внедрим массив по объекту-токену и отдадим его клиенту:
import { Controller, Get, Inject } from '@nestjs/common';
import { POSTS } from './posts.token.js';
@Controller('posts')
export class PostController {
posts: string[];
constructor(@Inject(POSTS) posts: string[]) {
this.posts = posts;
}
@Get()
getPosts(): string {
return this.posts.join(', ');
}
}
Оформите токен для списка
работников, зарегистрируйте
массив в WorkerModule
и внедрите его в
WorkerController.