라우터 병합
비공식 베타 번역
이 페이지는 PageTurner AI로 번역되었습니다(베타). 프로젝트 공식 승인을 받지 않았습니다. 오류를 발견하셨나요? 문제 신고 →
모든 API 코드를 하나의 파일에 작성하는 것은 바람직하지 않습니다. 라우터를 다른 라우터와 병합하는 것은 쉽습니다.
인라인 서브 라우터 정의하기
인라인 서브 라우터를 정의할 때는 라우터를 평범한 객체로 표현할 수 있습니다.
아래 예시에서 nested1과 nested2는 동일합니다:
server/_app.tstsimport * astrpc from '@trpc/server';import {publicProcedure ,router } from './trpc';constappRouter =router ({// Shorthand plain object for creating a sub-routernested1 : {proc :publicProcedure .query (() => '...'),},// Equivalent of:nested2 :router ({proc :publicProcedure .query (() => '...'),}),});
server/_app.tstsimport * astrpc from '@trpc/server';import {publicProcedure ,router } from './trpc';constappRouter =router ({// Shorthand plain object for creating a sub-routernested1 : {proc :publicProcedure .query (() => '...'),},// Equivalent of:nested2 :router ({proc :publicProcedure .query (() => '...'),}),});
자식 라우터와 병합하기
server.tsts// @filename: trpc.tsimport {initTRPC } from '@trpc/server';constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;// @filename: routers/_app.tsimport {router } from '../trpc';import {z } from 'zod';import {userRouter } from './user';import {postRouter } from './post';constappRouter =router ({user :userRouter , // put procedures under "user" namespacepost :postRouter , // put procedures under "post" namespace});// You can then access the merged route with// http://localhost:3000/trpc/<NAMESPACE>.<PROCEDURE>export typeAppRouter = typeofappRouter ;// @filename: routers/post.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constpostRouter =router ({create :publicProcedure .input (z .object ({title :z .string (),}),).mutation ((opts ) => {const {input } =opts ;// [...]}),list :publicProcedure .query (() => {// ...return [];}),});// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({list :publicProcedure .query (() => {// [..]return [];}),});
server.tsts// @filename: trpc.tsimport {initTRPC } from '@trpc/server';constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;// @filename: routers/_app.tsimport {router } from '../trpc';import {z } from 'zod';import {userRouter } from './user';import {postRouter } from './post';constappRouter =router ({user :userRouter , // put procedures under "user" namespacepost :postRouter , // put procedures under "post" namespace});// You can then access the merged route with// http://localhost:3000/trpc/<NAMESPACE>.<PROCEDURE>export typeAppRouter = typeofappRouter ;// @filename: routers/post.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constpostRouter =router ({create :publicProcedure .input (z .object ({title :z .string (),}),).mutation ((opts ) => {const {input } =opts ;// [...]}),list :publicProcedure .query (() => {// ...return [];}),});// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({list :publicProcedure .query (() => {// [..]return [];}),});
t.mergeRouters로 병합하기
모든 프로시저를 단일 네임스페이스에 평평하게 배치하는 것을 선호한다면, 대신 t.mergeRouters를 사용할 수 있습니다.
server.tsts// @filename: trpc.tsimport {initTRPC } from '@trpc/server';constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;export constmergeRouters =t .mergeRouters ;// @filename: routers/_app.tsimport {router ,publicProcedure ,mergeRouters } from '../trpc';import {z } from 'zod';import {userRouter } from './user';import {postRouter } from './post';constappRouter =mergeRouters (userRouter ,postRouter )export typeAppRouter = typeofappRouter ;// @filename: routers/post.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constpostRouter =router ({postCreate :publicProcedure .input (z .object ({title :z .string (),}),).mutation ((opts ) => {const {input } =opts ;// [...]}),postList :publicProcedure .query (() => {// ...return [];}),});// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({userList :publicProcedure .query (() => {// [..]return [];}),});
server.tsts// @filename: trpc.tsimport {initTRPC } from '@trpc/server';constt =initTRPC .create ();export constrouter =t .router ;export constpublicProcedure =t .procedure ;export constmergeRouters =t .mergeRouters ;// @filename: routers/_app.tsimport {router ,publicProcedure ,mergeRouters } from '../trpc';import {z } from 'zod';import {userRouter } from './user';import {postRouter } from './post';constappRouter =mergeRouters (userRouter ,postRouter )export typeAppRouter = typeofappRouter ;// @filename: routers/post.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constpostRouter =router ({postCreate :publicProcedure .input (z .object ({title :z .string (),}),).mutation ((opts ) => {const {input } =opts ;// [...]}),postList :publicProcedure .query (() => {// ...return [];}),});// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({userList :publicProcedure .query (() => {// [..]return [];}),});
라우터 동적 로딩
lazy 함수를 사용해 라우터를 동적으로 로드할 수 있습니다. 이는 애플리케이션의 콜드 스타트를 줄이는 데 유용합니다.
지연 로드된 라우터를 사용하는 방법은 일반 라우터 사용 방법과 차이가 없습니다.
라우터 지연 로딩 예시 코드:
ts// @filename: routers/_app.tsimport {lazy } from '@trpc/server';import {router } from '../trpc';export constappRouter =router ({// Option 1: Short-hand lazy load the greeting router if you have exactly 1 export and it is the routergreeting :lazy (() => import('./greeting.js')),// Option 2: Alternative way to lazy load if you have more than 1 exportuser :lazy (() => import('./user.js').then ((m ) =>m .userRouter )),});export typeAppRouter = typeofappRouter ;// ----------------------------------------------------// @filename: routers/greeting.tsimport {router ,publicProcedure } from '../trpc';export constgreetingRouter =router ({hello :publicProcedure .query (() => 'world'),});// ----------------------------------------------------// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';export constuserRouter =router ({list :publicProcedure .query (() => ['John', 'Jane', 'Jim']),});
ts// @filename: routers/_app.tsimport {lazy } from '@trpc/server';import {router } from '../trpc';export constappRouter =router ({// Option 1: Short-hand lazy load the greeting router if you have exactly 1 export and it is the routergreeting :lazy (() => import('./greeting.js')),// Option 2: Alternative way to lazy load if you have more than 1 exportuser :lazy (() => import('./user.js').then ((m ) =>m .userRouter )),});export typeAppRouter = typeofappRouter ;// ----------------------------------------------------// @filename: routers/greeting.tsimport {router ,publicProcedure } from '../trpc';export constgreetingRouter =router ({hello :publicProcedure .query (() => 'world'),});// ----------------------------------------------------// @filename: routers/user.tsimport {router ,publicProcedure } from '../trpc';export constuserRouter =router ({list :publicProcedure .query (() => ['John', 'Jane', 'Jim']),});