Какова цель ExecutionContext в NestJS?
ExecutionContext в NestJS играет важную роль в процессе обработки запросов и отвечает за контекст выполнения в рамках обработки каждого запроса. Это позволяет разработчикам более удобно взаимодействовать с различными аспектами запроса, такими как пользовательские данные, параметры маршрута и другие элементы, необходимые для выполнения задачи.
Что такое ExecutionContext?
ExecutionContext — это интерфейс, который предоставляет информацию о текущем запросе и контексте выполнения. Он используется, например, в Guard'ах, Interceptors и других компонентах NestJS, которые должны принимать решения в зависимости от состояния запроса.
Основные функции ExecutionContext:
Пример использования 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
.AuthGuard
, который реализует интерфейс CanActivate
.- Мы получаем текущий
request
изExecutionContext
с помощью методаswitchToHttp().getRequest()
. - Затем извлекаем токен из заголовков запроса.
- Простая проверка: если токен существует, возвращаем
true
, чтобы разрешить доступ, иначе —false
.
Заключение
ExecutionContext предоставляет удобный метод для доступа к информации о запросе и его контексте, что делает его незаменимым инструментом в разработке безопасных и масштабируемых приложений на NestJS. Новички должны понимать, как использовать этот интерфейс для улучшения функциональности своих приложений и реализации логики доступа.