Проверяет понимание механизмов обработки исключений в NestJS, включая встроенные фильтры и создание кастомных, что важно для построения надёжных API.
NestJS построен вокруг концепции слоёв, и обработка ошибок — не исключение. Когда в контроллере или сервисе выбрасывается исключение, оно проходит через цепочку Exception Filters. Если ни один фильтр его не поймал, срабатывает встроенный BaseExceptionFilter, который формирует стандартный HTTP-ответ.
По умолчанию NestJS распознаёт класс HttpException и его наследников (BadRequestException, NotFoundException и т.д.). Любое другое исключение превращается в ответ 500 Internal Server Error.
@Get(':id')
findOne(@Param('id') id: string) {
const user = this.usersService.findById(id);
if (!user) {
throw new NotFoundException('User not found');
}
return user;
}Чтобы централизованно логировать ошибки или менять формат ответа, создают фильтр с декоратором @Catch(). Он реализует интерфейс ExceptionFilter и метод catch().
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const res = ctx.getResponse();
const status = exception instanceof HttpException
? exception.getStatus() : 500;
res.status(status).json({
statusCode: status,
message: exception instanceof Error ? exception.message : 'Unknown',
timestamp: new Date().toISOString(),
});
}
}@UseFilters(new Filter()) над обработчиком.app.useGlobalFilters(new Filter()) в main.ts или через провайдер APP_FILTER.Фильтры применяются от самого узкого уровня к самому широкому: сначала метод, затем контроллер, затем глобальные. Первый подходящий по типу исключения фильтр останавливает цепочку.
Итог: используйте встроенные исключения для типовых HTTP-ошибок, а кастомные фильтры — когда нужен единый формат ответа, логирование или интеграция с системами мониторинга.