Сервис другого модуля в Nest
Пусть страница собрана в одном модуле,
а строка для неё готовится в другом.
Свой список providers этой
странице не поможет: нужного класса
там нет.
Сервис открывают в его модуле
через exports. Модуль страницы
импортирует модуль сервиса и принимает
объект в конструкторе. В свои
providers этот класс
не записывают: объект приходит
из импортированного модуля.
Покажем на примере постов и автора. Сервис автора отдаёт имя:
import { Injectable } from '@nestjs/common';
@Injectable()
export class AuthorService {
getName(): string {
return 'Editor';
}
}
Модуль автора открывает этот сервис:
import { Module } from '@nestjs/common';
import { AuthorService } from './author.service.js';
@Module({
providers: [AuthorService],
exports: [AuthorService],
})
export class AuthorModule {}
Контроллер постов принимает сервис автора и собирает из него ответ. Импорт класса в файле называет тип:
import { Controller, Get } from '@nestjs/common';
import { AuthorService } from '../author/author.service.js';
@Controller('posts')
export class PostController {
constructor(private authorService: AuthorService) {}
@Get()
getPosts(): string {
const name = this.authorService.getName();
return 'Morning note by ' + name;
}
}
Модуль постов импортирует модуль автора. По этой записи Nest и подставляет объект в конструктор:
import { Module } from '@nestjs/common';
import { AuthorModule } from '../author/author.module.js';
import { PostController } from './post.controller.js';
@Module({
imports: [AuthorModule],
controllers: [PostController],
})
export class PostsModule {}
Корневой модуль подключает модуль постов:
import { Module } from '@nestjs/common';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [PostsModule],
})
export class AppModule {}
Сделайте страницу работников
в контроллере WorkerController
модуля WorkersModule.
Строку для страницы возьмите
из сервиса DepartmentService
модуля DepartmentModule.
Модуль работников подключите
к корневому.