Исключение в сервисе в Nest
Поиск записи и проверка условий лежат в сервисе, а контроллер дублирует отказ, если правила меняются только там. Два места с одной логикой легко разъедутся.
Сервис знает список и сам бросает
NotFoundException, когда номера
нет. Контроллер читает параметр адреса,
вызывает операцию сервиса и отдаёт
результат без своих проверок.
Покажем на примере постов:
import { Injectable, NotFoundException } from '@nestjs/common';
@Injectable()
export class PostService {
private posts = [
{ id: '1', title: 'Morning note' },
{ id: '2', title: 'Evening note' },
];
getTitle(id: string): string {
const post = this.posts.find((item) => item.id === id);
if (!post) {
throw new NotFoundException('Post not found');
}
return post.title;
}
}
Контроллер только передаёт номер в сервис:
import { Controller, Get, Param } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
constructor(private postService: PostService) {}
@Get(':id')
getPost(@Param('id') id: string): string {
return this.postService.getTitle(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 {}
Храните работников в WorkerService
и бросайте отказ «не найдено» из
операции поиска, если номера нет.
WorkerController только вызывает
сервис по адресу. Подключите оба
класса к корневому модулю.