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

Исключение в сервисе в 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 только вызывает сервис по адресу. Подключите оба класса к корневому модулю.

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