Каким образом осуществляется обработка исключений и ошибок внутри NestJS?
Ответ от нейросети
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-ответы с соответствующим статусом.