Metadata
Inofficiell Beta-översättning
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
Procedurmetadata låter dig lägga till en valfri procedurespecifik meta-egenskap som kommer att finnas tillgänglig i alla parametrar för middleware-funktioner.
tips
Använd metadata tillsammans med trpc-openapi om du vill exponera REST-kompatibla slutpunkter för din applikation.
Skapa router med typad metadata
tsximport {initTRPC } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired : boolean;}export constt =initTRPC .context <Context >().meta <Meta >().create ();export constappRouter =t .router ({// [...]});
tsximport {initTRPC } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired : boolean;}export constt =initTRPC .context <Context >().meta <Meta >().create ();export constappRouter =t .router ({// [...]});
Exempel med autentiseringsinställningar per route
server.tstsximport {initTRPC ,TRPCError } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired : boolean;}export constt =initTRPC .context <Context >().meta <Meta >().create ();export constauthedProcedure =t .procedure .use (async (opts ) => {const {meta ,next ,ctx } =opts ;// only check authorization if enabledif (meta ?.authRequired && !ctx .user ) {throw newTRPCError ({code : 'UNAUTHORIZED' });}returnnext ();});export constappRouter =t .router ({hello :authedProcedure .meta ({authRequired : false }).query (() => {return {greeting : 'hello world',};}),protectedHello :authedProcedure .meta ({authRequired : true }).query (() => {return {greeting : 'hello-world',};}),});
server.tstsximport {initTRPC ,TRPCError } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired : boolean;}export constt =initTRPC .context <Context >().meta <Meta >().create ();export constauthedProcedure =t .procedure .use (async (opts ) => {const {meta ,next ,ctx } =opts ;// only check authorization if enabledif (meta ?.authRequired && !ctx .user ) {throw newTRPCError ({code : 'UNAUTHORIZED' });}returnnext ();});export constappRouter =t .router ({hello :authedProcedure .meta ({authRequired : false }).query (() => {return {greeting : 'hello world',};}),protectedHello :authedProcedure .meta ({authRequired : true }).query (() => {return {greeting : 'hello-world',};}),});
Standardmeta, kedjesammansättning och grund sammanslagning
Du kan ange standardvärden för din metatyp, och om du kedjar meta ovanpå en basprocedur kommer den att grund-sammanslås.
tsximport {initTRPC } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired ?: boolean;role ?: 'user' | 'admin'}export constt =initTRPC .context <Context >().meta <Meta >().create ({// Set a default valuedefaultMeta : {authRequired : false }});constauthMiddleware =t .middleware ((opts ) =>opts .next ());constpublicProcedure =t .procedure constauthProcedure =publicProcedure .use (authMiddleware ).meta ({authRequired : true,role : 'user'});constadminProcedure =authProcedure .meta ({role : 'admin'});
tsximport {initTRPC } from '@trpc/server';typeContext = {user : {name : string } | null };interfaceMeta {authRequired ?: boolean;role ?: 'user' | 'admin'}export constt =initTRPC .context <Context >().meta <Meta >().create ({// Set a default valuedefaultMeta : {authRequired : false }});constauthMiddleware =t .middleware ((opts ) =>opts .next ());constpublicProcedure =t .procedure constauthProcedure =publicProcedure .use (authMiddleware ).meta ({authRequired : true,role : 'user'});constadminProcedure =authProcedure .meta ({role : 'admin'});