Какова цель 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. Новички должны понимать, как использовать этот интерфейс для улучшения функциональности своих приложений и реализации логики доступа.