Поиск элемента в сервисе в Nest
Бывает, что записи лежат списком, а открыть одну по номеру из адреса нельзя. Метод знает только весь массив, хотя клиент просит одну карточку.
Поиск по полю номера делают в сервисе. Контроллер читает параметр из пути и передаёт его в операцию поиска, а в ответ идёт найденный объект.
Покажем на примере постов. Зададим две записи с номерами и метод поиска:
import { Injectable } from '@nestjs/common';
@Injectable()
export class PostService {
private posts = [
{
id: '1',
title: 'Morning note',
text: 'A short text',
},
{
id: '2',
title: 'Evening note',
text: 'Another text',
},
];
findPost(id: string) {
return this.posts.find((post) => post.id === id);
}
}
Адрес с параметром номера вызовет поиск и вернёт объект поста:
import { Controller, Get, Param } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller()
export class PostController {
constructor(private postService: PostService) {}
@Get('posts/:id')
getPost(@Param('id') id: string) {
return this.postService.findPost(id);
}
}
Укажем оба класса в корневом модуле:
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.
Оба класса подключите к корневому модулю.