메타데이터
비공식 베타 번역
이 페이지는 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',};}),});
기본 메타, 체이닝 및 얕은 병합
메타 타입에 대한 기본값을 설정할 수 있으며, 기본 프로시저 위에 메타를 체이닝하면 얕은 병합(shallow merge)이 수행됩니다.
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'});