Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Какова цель ExecutionContext в NestJS?

ExecutionContext в NestJS играет важную роль в процессе обработки запросов и отвечает за контекст выполнения в рамках обработки каждого запроса. Это позволяет разработчикам более удобно взаимодействовать с различными аспектами запроса, такими как пользовательские данные, параметры маршрута и другие элементы, необходимые для выполнения задачи.

Что такое ExecutionContext?

ExecutionContext — это интерфейс, который предоставляет информацию о текущем запросе и контексте выполнения. Он используется, например, в Guard'ах, Interceptors и других компонентах NestJS, которые должны принимать решения в зависимости от состояния запроса.

Основные функции ExecutionContext:

  • Получение информации о текущем запросе и ответе.
  • Определение текущего контекста выполнения, который может включать информацию о HTTP-запросе, WebSocket, RPC и т.д.
  • Доступ к метаданным о текущем обработчике маршрута.
  • Пример использования ExecutionContext

    Рассмотрим пример использования ExecutionContext в Guard'е. В этом примере мы создадим Guard, который проверяет, авторизован ли пользователь, основываясь на токене, переданном в заголовках запроса.

    import {Injectable, CanActivate, ExecutionContext} from '@nestjs/common';
    import {Request} from 'express';
    
    @Injectable()
    export class AuthGuard implements CanActivate {
        canActivate(context: ExecutionContext): boolean {
            const request: Request = context.switchToHttp().getRequest();
            const token = request.headers['authorization'];
    
            // Простейшая проверка наличия токена (действительную логику проверки необходимо реализовать)
            return token ? true : false;
        }
    }
    

    Объяснение примера

  • Импорт необходимых модулей: Мы импортируем Injectable, CanActivate и ExecutionContext из @nestjs/common, а также Request из express.
  • Создание Guard'а: Мы создаем класс AuthGuard, который реализует интерфейс CanActivate.
  • Метод canActivate:
    • Мы получаем текущий request из ExecutionContext с помощью метода switchToHttp().getRequest().
    • Затем извлекаем токен из заголовков запроса.
    • Простая проверка: если токен существует, возвращаем true, чтобы разрешить доступ, иначе — false.
  • Заключение

    ExecutionContext предоставляет удобный метод для доступа к информации о запросе и его контексте, что делает его незаменимым инструментом в разработке безопасных и масштабируемых приложений на NestJS. Новички должны понимать, как использовать этот интерфейс для улучшения функциональности своих приложений и реализации логики доступа.