Definiera Routrar
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
För att börja bygga ditt tRPC-baserade API måste du först definiera din router. När du behärskar grunderna kan du anpassa dina routrar för mer avancerade användningsområden.
Initiera tRPC
Du bör initiera tRPC exakt en gång per applikation. Flera instanser av tRPC kommer att orsaka problem.
server/trpc.tstsimport {initTRPC } from '@trpc/server';// You can use any variable name you like.// We use t to keep things simple.constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;
server/trpc.tstsimport {initTRPC } from '@trpc/server';// You can use any variable name you like.// We use t to keep things simple.constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;
Du kommer att märka att vi exporterar specifika metoder från t-variabeln istället för t självt. Detta gör vi för att etablera en konsekvent uppsättning procedurer som vi använder idiomatiskt i vår kodbas.
Definiera en router
Låt oss nu definiera en router med en procedur för vår applikation. Vi har nu skapat en API-”endpoint”.
För att dessa endpoints ska exponeras för frontend måste din Adapter konfigureras med din appRouter-instans.
server/_app.tstsimport {publicProcedure ,router } from './trpc';constappRouter =router ({greeting :publicProcedure .query (() => 'hello tRPC v10!'),});// Export only the type of a router!// This prevents us from importing server code on the client.export typeAppRouter = typeofappRouter ;
server/_app.tstsimport {publicProcedure ,router } from './trpc';constappRouter =router ({greeting :publicProcedure .query (() => 'hello tRPC v10!'),});// Export only the type of a router!// This prevents us from importing server code on the client.export typeAppRouter = typeofappRouter ;
Avancerad användning
När du initierar din router kan du med tRPC:
-
Konfigurera request contexts
-
Tilldela metadata till procedurer
-
Transformera data efter behov
-
Anpassa runtime configuration
Du kan använda metodkedjor för att anpassa ditt t-objekt vid initiering. Till exempel:
tsconst t = initTRPC.context<Context>().meta<Meta>().create({/* [...] */});
tsconst t = initTRPC.context<Context>().meta<Meta>().create({/* [...] */});
Runtime-konfiguration
tsexport interface RootConfig<TTypes extends RootTypes> {/*** Use a data transformer* @see https://trpc.io/docs/v11/data-transformers*/transformer: TTypes['transformer'];/*** Use custom error formatting* @see https://trpc.io/docs/v11/error-formatting*/errorFormatter: ErrorFormatter<TTypes['ctx'], any>;/*** Allow `@trpc/server` to run in non-server environments* @warning **Use with caution**, this should likely mainly be used within testing.* @default false*/allowOutsideOfServer: boolean;/*** Is this a server environment?* @warning **Use with caution**, this should likely mainly be used within testing.* @default typeof window === 'undefined' || 'Deno' in window || process.env.NODE_ENV === 'test'*/isServer: boolean;/*** Is this development?* Will be used to decide if the API should return stack traces* @default process.env.NODE_ENV !== 'production'*/isDev: boolean;}
tsexport interface RootConfig<TTypes extends RootTypes> {/*** Use a data transformer* @see https://trpc.io/docs/v11/data-transformers*/transformer: TTypes['transformer'];/*** Use custom error formatting* @see https://trpc.io/docs/v11/error-formatting*/errorFormatter: ErrorFormatter<TTypes['ctx'], any>;/*** Allow `@trpc/server` to run in non-server environments* @warning **Use with caution**, this should likely mainly be used within testing.* @default false*/allowOutsideOfServer: boolean;/*** Is this a server environment?* @warning **Use with caution**, this should likely mainly be used within testing.* @default typeof window === 'undefined' || 'Deno' in window || process.env.NODE_ENV === 'test'*/isServer: boolean;/*** Is this development?* Will be used to decide if the API should return stack traces* @default process.env.NODE_ENV !== 'production'*/isDev: boolean;}