Вопрос проверяет знание системы обработки исключений в NestJS, включая использование встроенных и кастомных фильтров.
Исключения в NestJS обрабатываются с помощью фильтров исключений. Фреймворк предоставляет встроенные фильтры для общих HTTP-ошибок. Для обработки специфических ошибок можно создавать кастомные фильтры, аннотированные декоратором @Catch.
В NestJS система обработки исключений базируется на фильтрах, которые могут быть встроенными или пользовательскими. Встроенные фильтры, такие как HttpException, автоматически обрабатывают стандартные HTTP-ошибки. Кастомные фильтры позволяют добавлять собственную логику обработки.
Пример кастомного фильтра:
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 request = ctx.getRequest<Request>();
const response = ctx.getResponse<Response>();
const status = exception.getStatus();
const errorResponse = {
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
message: exception.message || 'Internal Server Error',
};
response.status(status).json(errorResponse);
}
}
Чтобы использовать этот фильтр:
Зарегистрируйте его в модуле:
import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
@Module({
providers: [
{
provide: APP_FILTER,
useClass: HttpErrorFilter,
},
],
})
export class AppModule {}Или примените локально к контроллеру:
import { UseFilters } from '@nestjs/common';
@UseFilters(new HttpErrorFilter())
@Controller('example')
export class ExampleController {}
Используйте встроенные фильтры для обработки стандартных ошибок, а кастомные фильтры — для специфической логики. Это позволяет централизованно управлять исключениями и улучшает отладку.