Interceptors (перехватчики) проверяют способность разработчика обрабатывать запросы и ответы на уровне контроллеров или маршрутов, добавляя дополнительные этапы обработки данных.
Interceptors в NestJS используются для выполнения логики до или после вызова метода. Они подходят для таких задач, как логирование, обработка ошибок, модификация ответов и кеширование. Перехватчики реализуются через интерфейс NestInterceptor и применяются через декоратор @UseInterceptors.
Interceptors в NestJS — это мощный инструмент для работы с запросами и ответами. Они позволяют:
Логировать входящие запросы или результаты выполнения.
Изменять данные ответа перед отправкой клиенту.
Управлять потоками данных с использованием RxJS.
Обрабатывать исключения на уровне, независимом от бизнес-логики.
Каждый Interceptor реализует метод intercept, который принимает два параметра:
ExecutionContext — содержит информацию о текущем запросе.
CallHandler — обрабатывает выполнение метода и возвращает поток данных.
Пример: создание Interceptor для логирования:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
console.log('Начало обработки запроса');
const start = Date.now();
return next.handle().pipe(
tap(() => console.log(`Обработка завершена за ${Date.now() - start}ms`)),
);
}
}Применение Interceptor через декоратор:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
@Controller('example')
@UseInterceptors(LoggingInterceptor)
export class ExampleController {
@Get()
getData() {
return { message: 'Данные успешно получены' };
}
}