Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Nest.js: interceptors, nestinterceptor, executioncontext, callhandler, rxjs

Как использовать интерсепторы?

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: 'Данные успешно получены' };
  	}
}
  • Аватар

    Node.js Guru

    Demetra

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • Nest.js

    Nest.js

Ключевые слова

#interceptors

#nestinterceptor

#executioncontext

#callhandler

#rxjs

Подпишись на Node.js Developer в телеграм

  • Аватар

    Node.js Guru

    Demetra

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.