Обработка пользовательских ошибок в NestJS: подробное руководство

Обработка ошибок — важнейший аспект процесса разработки любого приложения. NestJS, популярная платформа Node.js, предоставляет надежные функции для управления ошибками. В этой статье мы рассмотрим различные методы реализации пользовательской обработки ошибок в NestJS, сопровождаемые примерами кода.

  1. Расширение базового класса исключений.
    NestJS предоставляет базовый класс исключений, который можно расширить для создания собственных классов ошибок. Расширяя этот класс, вы можете определить свои собственные типы ошибок с определенными свойствами и поведением.
import { HttpException, HttpStatus } from '@nestjs/common';
export class CustomError extends HttpException {
  constructor(message: string, statusCode: HttpStatus) {
    super(message, statusCode);
    this.name = 'CustomError';
  }
}
  1. Создание пользовательских каналов.
    Каналы в 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;
  }
}
  1. Пользовательские фильтры.
    Фильтры в 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,
    });
  }
}
  1. Глобальный фильтр исключений.
    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 обеспечит надежность и удобство работы пользователя, а также эффективное управление ошибками.