ルーターの結合
コード内のすべてのAPIコードを同じファイルに記述するのは良い考えではありません。ルーターを他のルーターと簡単に結合できます。
インラインサブルーターの定義
インラインサブルーターを定義するときに、ルーターをプレーンオブジェクトとして表すことができます。
次の例では、nested1
とnested2
は同じ
server/_app.tsts
import * 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.tsts
import * 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 [];}),});