Данные в сервисе в Nest
Представим, что страница одной записи каждый раз собирает её поля прямо в методе контроллера. Данные размазаны по маршруту, хотя карточка на каждый запрос одна и та же.
Данные удобнее держать в сервисе как поле класса. Метод контроллера только запрашивает готовый объект и отдаёт его клиенту без повторного копирования строк.
Покажем на примере поста. Зададим в сервисе одну карточку и операцию, которая её возвращает:
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
private post = {
title: 'Morning note',
text: 'A short text',
};
getPost() {
return this.post;
}
}
Контроллер откроет адрес одного поста и вернёт объект из сервиса:
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller()
export class PostController {
constructor(private postService: PostService) {}
@Get('post')
getPost() {
return this.postService.getPost();
}
}
Подключим оба класса в корневом модуле:
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 {}
Храните карточку одного работника
в сервисе WorkerService и отдайте
её из контроллера WorkerController.
Оба класса подключите к корневому модулю.