Перейти к содержимому

6. Context

Контекст в tRPC — это объект, который создаётся для каждого запроса и передаётся во все процедуры. Он используется для передачи зависимостей: подключения к базе данных, информации об аутентифицированном пользователе, сессии и других сервисов.

Функция createContext вызывается при каждом входящем запросе. Она получает объект запроса (req) и ответа (res) и должна вернуть объект контекста. Этот объект становится доступен в каждой процедуре через параметр ctx.

Для типизации контекста используйте initTRPC.context<TContext>().create(). TypeScript автоматически типизирует ctx во всех процедурах на основе возвращаемого типа вашей функции createContext.

Самый распространённый паттерн — передача Prisma-клиента или другого ORM через контекст. Это позволяет легко мокировать базу данных в тестах, просто подменяя объект контекста.

Для аутентификации, createContext читает сессию или JWT из заголовков запроса и добавляет объект пользователя в контекст. Middleware может затем проверять наличие ctx.user и выбрасывать ошибку UNAUTHORIZED, если пользователь не авторизован.

Контекст — это мощный механизм инъекции зависимостей. Через него можно передавать любые сервисы: email-сервис, файловое хранилище, кэш Redis, логгер и т.д.