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

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

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

Готовый сервис приходит в контроллер снаружи. В конструкторе класс называет тип, который ему нужен, а фреймворк создаёт объект этого типа и передаёт его в параметр. Такую передачу называют внедрение зависимостей. Зависимость - сервис, без которого странице нечего вернуть. Внедрение - тот момент, когда готовый объект приходит в контроллер снаружи.

Откуда Nest берёт объект, видно по типу параметра. Тот же класс должен быть записан в провайдерах модуля. Фреймворк создаёт по этой записи объект и подставляет его, когда собирает контроллер. Пометка private у параметра делает его полем: метод страницы достаёт сервис через this, вызывает нужную операцию и отдаёт результат клиенту. Сам адрес только выбирает метод, а данные уже лежат во внедрённом сервисе.

Обе записи называют один класс. Тип в конструкторе говорит, что нужно контроллеру. Список провайдеров говорит, что этот класс разрешено создать. Если в провайдерах его нет, в параметр нечего положить, и контроллер не соберётся.

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

import { Injectable } from '@nestjs/common'; @Injectable() export class PostService { getPosts(): string { return 'All posts'; } }

В конструкторе контроллера укажем тип сервиса. Метод страницы вызовет его операцию и вернёт результат клиенту:

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

Оба класса регистрируем в корневом модуле - контроллер в списке контроллеров, сервис в провайдерах:

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

Сделайте страницу списка работников в контроллере WorkerController, которая берёт данные из сервиса WorkerService, и подключите оба класса к корневому модулю.

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