РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsPmPvSIS 46 of 168 menu
◀ ▶

Внедрение сервиса в сервис в Nest

Пусть карточка собирает данные из двух мест, а оба живут в одном классе. Класс разрастается: он хранит и саму запись, и сведения, которые к ней прилагаются.

Прилагаемые сведения держат в отдельном сервисе. Сервис записи получает его через конструктор и собирает ответ из двух источников. Контроллер знает только сервис записи.

Покажем на примере поста и его автора. Опишем сервис автора с одной операцией имени:

import { Injectable } from '@nestjs/common'; @Injectable() export class AuthorService { getName(): string { return 'Editor'; } }

Сервис поста примет автора в конструкторе и соберёт строку для карточки:

import { Injectable } from '@nestjs/common'; import { AuthorService } from './author.service.js'; @Injectable() export class PostService { constructor(private authorService: AuthorService) {} getPost(): string { const title = 'Morning note'; const name = this.authorService.getName(); return `${title} by ${name}`; } }

Контроллер запросит готовую строку у сервиса поста:

import { Controller, Get } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller() export class PostController { constructor(private postService: PostService) {} @Get('post') getPost(): string { return this.postService.getPost(); } }

Оба сервиса и контроллер укажем в корневом модуле:

import { Module } from '@nestjs/common'; import { AuthorService } from './author.service.js'; import { PostController } from './post.controller.js'; import { PostService } from './post.service.js'; @Module({ controllers: [PostController], providers: [PostService, AuthorService], }) export class AppModule {}

Сделайте карточку работника в контроллере WorkerController. Сведения об отделе берите из сервиса DepartmentService, а контроллер пусть спрашивает только сервис WorkerService. Все три класса подключите к корневому модулю.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить