Своё исключение в Nest
Один и тот же отказ повторяется на нескольких маршрутах с одним текстом и кодом. Копировать длинную конструкцию в каждый метод неудобно и легко ошибиться в числе.
Свой класс наследует HttpException
и в конструкторе передаёт текст и
значение из HttpStatus. В методе
достаточно создать объект этого типа
без повторения статуса и фразы.
Покажем на примере постов:
import { HttpException, HttpStatus } from '@nestjs/common';
export class EmptyTitleException extends HttpException {
constructor() {
super('Title is required', HttpStatus.BAD_REQUEST);
}
}
В контроллере проверим название и бросим своё исключение:
import { Body, Controller, Post } from '@nestjs/common';
import { EmptyTitleException } from './empty-title.exception.js';
@Controller('posts')
export class PostController {
@Post()
createPost(@Body() body: { title: string }) {
if (!body.title.trim()) {
throw new EmptyTitleException();
}
return { title: body.title };
}
}
Контроллер подключаем в корневом модуле:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({
controllers: [PostController],
})
export class AppModule {}
Опишите тип отказа для пустого имени
работника, наследуя общее HTTP-исключение
с кодом «неверный запрос» и своей
фразой. Используйте его в
WorkerController при создании
и подключите контроллер к корневому
модулю.