Несколько сервисов в Nest
Бывает, что две разные выборки готовят разные классы, а страница знает только один из них. Второй адрес вынужден дублировать правила или обходиться без своего класса.
Контроллер может принять несколько сервисов в конструкторе. Каждый маршрут вызывает свою операцию, а Nest подставляет оба объекта из списка провайдеров.
Покажем на примере постов и черновиков. Два сервиса с разными короткими ответами:
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
getPosts(): string {
return 'All posts';
}
}
Черновики отдаёт отдельный класс:
import { Injectable } from '@nestjs/common';
@Injectable()
export class DraftService {
getDrafts(): string {
return 'Draft posts';
}
}
Контроллер получит оба сервиса и откроет два адреса:
import { Controller, Get } from '@nestjs/common';
import { DraftService } from './draft.service.js';
import { PostService } from './post.service.js';
@Controller()
export class PostController {
constructor(
private postService: PostService,
private draftService: DraftService,
) {}
@Get('posts')
getPosts(): string {
return this.postService.getPosts();
}
@Get('drafts')
getDrafts(): string {
return this.draftService.getDrafts();
}
}
Запишем оба сервиса и контроллер в корневом модуле:
import { Module } from '@nestjs/common';
import { DraftService } from './draft.service.js';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
controllers: [PostController],
providers: [PostService, DraftService],
})
export class AppModule {}
В контроллере WorkerController
отдайте список работников из сервиса
WorkerService и архив из сервиса
ArchiveService. Подключите
контроллер и оба сервиса к корневому
модулю.