Обработка ошибок — важнейший аспект процесса разработки любого приложения. NestJS, популярная платформа Node.js, предоставляет надежные функции для управления ошибками. В этой статье мы рассмотрим различные методы реализации пользовательской обработки ошибок в NestJS, сопровождаемые примерами кода.
- Расширение базового класса исключений.
NestJS предоставляет базовый класс исключений, который можно расширить для создания собственных классов ошибок. Расширяя этот класс, вы можете определить свои собственные типы ошибок с определенными свойствами и поведением.
import { HttpException, HttpStatus } from '@nestjs/common';
export class CustomError extends HttpException {
constructor(message: string, statusCode: HttpStatus) {
super(message, statusCode);
this.name = 'CustomError';
}
}
- Создание пользовательских каналов.
Каналы в NestJS позволяют преобразовывать данные до того, как они достигнут обработчика маршрута. Вы можете использовать каналы для проверки входящих данных и выдавать пользовательские ошибки в случае неудачной проверки.
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class CustomValidationPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
if (!value) {
throw new CustomError('Value is required', HttpStatus.BAD_REQUEST);
}
return value;
}
}
- Пользовательские фильтры.
Фильтры в NestJS можно использовать для перехвата и обработки исключений, возникающих во время цикла запрос/ответ. Создав собственный фильтр исключений, вы можете форматировать и настраивать ответы об ошибках в соответствии с требованиями вашего приложения.
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { CustomError } from './custom-error';
@Catch(CustomError)
export class CustomErrorFilter implements ExceptionFilter {
catch(exception: CustomError, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
response.status(status).json({
statusCode: status,
message: exception.message,
});
}
}
- Глобальный фильтр исключений.
NestJS позволяет вам определить глобальный фильтр исключений, который перехватывает и обрабатывает все необработанные исключения в вашем приложении. Этот фильтр можно использовать для единообразного форматирования и регистрации ошибок во всей вашей кодовой базе.
import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
@Catch()
export class GlobalExceptionFilter extends BaseExceptionFilter {
catch(exception: Error, host: ArgumentsHost) {
// Custom error handling logic
}
}
В этой статье мы рассмотрели несколько методов реализации пользовательской обработки ошибок в NestJS. Расширяя базовый класс исключений, создавая собственные каналы и используя фильтры, вы можете эффективно обрабатывать ошибки и предоставлять содержательную обратную связь своим пользователям. Кроме того, мы обсудили важность глобального фильтра исключений для согласованной обработки ошибок.
Реализация этих методов обработки ошибок в вашем приложении NestJS обеспечит надежность и удобство работы пользователя, а также эффективное управление ошибками.