元数据
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
过程元数据允许您添加可选的、过程特定的 meta 属性,该属性将在所有中间件函数参数中可用。
技巧
若需为应用提供 REST 兼容的端点,请结合使用元数据与 trpc-openapi。
创建带有类型化元数据的路由器
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 ({// [...]});
按路由认证设置示例
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',};}),});
默认元数据、链式操作与浅层合并
您可为元数据类型设置默认值,若在基础过程之上链式添加元数据,系统将执行浅层合并。
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'});