라우터 병합
모든 API 코드를 동일한 파일에 작성하면 관리가 어려워질 수 있습니다. 라우터를 분리하기 위해 라우터를 병합하는 것은 매우 쉽습니다.
자식 라우터와 병합
routers/user.tstsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({list :publicProcedure .query (() => {// [..]return [];}),});
routers/user.tstsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({list :publicProcedure .query (() => {// [..]return [];}),});
routers/post.tstsimport {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 [];}),});
routers/post.tstsimport {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 [];}),});
routers/_app.tstsimport {router } from '../trpc';import {userRouter } from './user';import {postRouter } from './post';constappRouter =router ({user :userRouter ,post :postRouter ,});appRouter .user appRouter .post export typeAppRouter = typeofappRouter ;
routers/_app.tstsimport {router } from '../trpc';import {userRouter } from './user';import {postRouter } from './post';constappRouter =router ({user :userRouter ,post :postRouter ,});appRouter .user appRouter .post export typeAppRouter = typeofappRouter ;
t.mergeRouters를 사용한 병합
모든 프로시저를 단일 네임스페이스에 평탄하게 배치하는 것을 선호한다면, 대신 t.mergeRouters를 사용할 수 있습니다.
routers/user.tstsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({userList :publicProcedure .query (() => {// [..]return [];}),});
routers/user.tstsimport {router ,publicProcedure } from '../trpc';import {z } from 'zod';export constuserRouter =router ({userList :publicProcedure .query (() => {// [..]return [];}),});
routers/post.tstsimport {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 [];}),});
routers/post.tstsimport {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 [];}),});
routers/_app.tstsimport {mergeRouters } from '../trpc';import {userRouter } from './user';import {postRouter } from './post';constappRouter =mergeRouters (userRouter ,postRouter );export typeAppRouter = typeofappRouter ;
routers/_app.tstsimport {mergeRouters } from '../trpc';import {userRouter } from './user';import {postRouter } from './post';constappRouter =mergeRouters (userRouter ,postRouter );export typeAppRouter = typeofappRouter ;
라우터 동적 로드
lazy 함수를 사용하여 라우터를 동적으로 로드할 수 있습니다. 이는 애플리케이션의 콜드 스타트를 줄이는 데 유용할 수 있습니다. 지연 로딩된 라우터를 사용하는 방식과 일반 라우터를 사용하는 방식 사이에 차이는 없습니다.
routers/greeting.tstsimport {router ,publicProcedure } from '../trpc';export constgreetingRouter =router ({hello :publicProcedure .query (() => 'world'),});
routers/greeting.tstsimport {router ,publicProcedure } from '../trpc';export constgreetingRouter =router ({hello :publicProcedure .query (() => 'world'),});
routers/user.tstsimport {router ,publicProcedure } from '../trpc';export constuserRouter =router ({list :publicProcedure .query (() => ['John', 'Jane', 'Jim']),});
routers/user.tstsimport {router ,publicProcedure } from '../trpc';export constuserRouter =router ({list :publicProcedure .query (() => ['John', 'Jane', 'Jim']),});
routers/_app.tstsimport {lazy } from '@trpc/server';import {router } from '../trpc';export constappRouter =router ({// Option 1: Short-hand when the module has exactly 1 router exportedgreeting :lazy (() => import('./greeting.js')),// Option 2: if exporting more than 1 routeruser :lazy (() => import('./user.js').then ((m ) =>m .userRouter )),});export typeAppRouter = typeofappRouter ;
routers/_app.tstsimport {lazy } from '@trpc/server';import {router } from '../trpc';export constappRouter =router ({// Option 1: Short-hand when the module has exactly 1 router exportedgreeting :lazy (() => import('./greeting.js')),// Option 2: if exporting more than 1 routeruser :lazy (() => import('./user.js').then ((m ) =>m .userRouter )),});export typeAppRouter = typeofappRouter ;