Metadatos
Traducción Beta No Oficial
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Los metadatos de procedimiento te permiten añadir una propiedad opcional meta específica del procedimiento, que estará disponible en todos los parámetros de las funciones de middleware.
consejo
Utiliza los metadatos junto con trpc-openapi si quieres exponer endpoints compatibles con REST para tu aplicación.
Crear un enrutador con metadatos tipados
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 ({// [...]});
Ejemplo con configuraciones de autenticación por ruta
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',};}),});
Meta por defecto, encadenamiento y fusión superficial
Puedes establecer valores predeterminados para tu tipo de meta, y si encadenas meta sobre un procedimiento base, se fusionará superficialmente.
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'});