Sobes.tech
Back to questions
Junior — Middle
81

Каким образом осуществляется обработка исключений и ошибок внутри NestJS?

Companies where asked
Бизнес-Азимут

Answer from AI

sobes.tech AI

В NestJS обработка исключений реализуется через механизм фильтров исключений (Exception Filters). По умолчанию, если в контроллере или сервисе возникает ошибка, NestJS возвращает стандартный HTTP-ответ с кодом ошибки.

Чтобы кастомизировать обработку ошибок, можно создать класс, реализующий интерфейс ExceptionFilter, и переопределить метод catch(exception, host). В этом методе можно обработать ошибку, например, логировать её и вернуть кастомный ответ.

Пример простого фильтра исключений:

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class HttpErrorFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status = exception.getStatus();

    response.status(status).json({
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
      message: exception.message,
    });
  }
}

Этот фильтр можно применить глобально или на уровне контроллера/метода.

Кроме того, для обработки неожиданных ошибок можно использовать глобальный фильтр, который ловит все исключения (@Catch() без параметров).

Также NestJS поддерживает встроенную обработку ошибок через встроенные исключения (HttpException и наследники), которые автоматически преобразуются в HTTP-ответы с соответствующим статусом.