Request Context
The createContext()
function is called for each request and the result is propagated to all resolvers. You can use this to pass contextual data down to the resolvers.
Example code
server/context.tsts
import * as trpc from '@trpc/server';import * as trpcNext from '@trpc/server/adapters/next';// The app's context - is generated for each incoming requestexport async function createContext(opts?: trpcNext.CreateNextContextOptions) {// Create your context based on the request object// Will be available as `ctx` in all your resolvers// This is just an example of something you'd might want to do in your ctx fnasync function getUserFromHeader() {if (opts?.req.headers.authorization) {// const user = await decodeJwtToken(req.headers.authorization.split(' ')[1])// return user;}return null;}const user = await getUserFromHeader();return {user,};}type Context = trpc.inferAsyncReturnType<typeof createContext>;// Helper function to create a router with your app's contextexport function createRouter() {return trpc.router<Context>();}
server/context.tsts
import * as trpc from '@trpc/server';import * as trpcNext from '@trpc/server/adapters/next';// The app's context - is generated for each incoming requestexport async function createContext(opts?: trpcNext.CreateNextContextOptions) {// Create your context based on the request object// Will be available as `ctx` in all your resolvers// This is just an example of something you'd might want to do in your ctx fnasync function getUserFromHeader() {if (opts?.req.headers.authorization) {// const user = await decodeJwtToken(req.headers.authorization.split(' ')[1])// return user;}return null;}const user = await getUserFromHeader();return {user,};}type Context = trpc.inferAsyncReturnType<typeof createContext>;// Helper function to create a router with your app's contextexport function createRouter() {return trpc.router<Context>();}