6. Context
Контекст в tRPC — это объект, который создаётся для каждого запроса и передаётся во все процедуры. Он используется для передачи зависимостей: подключения к базе данных, информации об аутентифицированном пользователе, сессии и других сервисов.
Функция createContext
Заголовок раздела «Функция createContext»Функция createContext вызывается при каждом входящем запросе. Она получает объект запроса (req) и ответа (res) и должна вернуть объект контекста. Этот объект становится доступен в каждой процедуре через параметр ctx.
Типизация контекста
Заголовок раздела «Типизация контекста»Для типизации контекста используйте initTRPC.context<TContext>().create(). TypeScript автоматически типизирует ctx во всех процедурах на основе возвращаемого типа вашей функции createContext.
Передача базы данных
Заголовок раздела «Передача базы данных»Самый распространённый паттерн — передача Prisma-клиента или другого ORM через контекст. Это позволяет легко мокировать базу данных в тестах, просто подменяя объект контекста.
Аутентификация через контекст
Заголовок раздела «Аутентификация через контекст»Для аутентификации, createContext читает сессию или JWT из заголовков запроса и добавляет объект пользователя в контекст. Middleware может затем проверять наличие ctx.user и выбрасывать ошибку UNAUTHORIZED, если пользователь не авторизован.
Инъекция зависимостей
Заголовок раздела «Инъекция зависимостей»Контекст — это мощный механизм инъекции зависимостей. Через него можно передавать любые сервисы: email-сервис, файловое хранилище, кэш Redis, логгер и т.д.