Métadonnées
Traduction Bêta Non Officielle
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Les métadonnées de procédure vous permettent d'ajouter une propriété meta optionnelle spécifique à chaque procédure, qui sera disponible dans tous les paramètres des fonctions de middleware.
astuce
Utilisez les métadonnées avec trpc-openapi si vous souhaitez exposer des endpoints REST compatibles pour votre application.
Créer un routeur avec métadonnées typées
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 ({// [...]});
Exemple avec paramètres d'authentification par 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',};}),});
Métadonnées par défaut, chaînage et fusion superficielle
Vous pouvez définir des valeurs par défaut pour votre type de métadonnées. Si vous chaînez des métadonnées sur une procédure de base, elles seront fusionnées de manière superficielle.
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'});