diff --git a/docs/content/1.get-started/3.tips/2.server-side-calls.md b/docs/content/1.get-started/3.tips/2.server-side-calls.md new file mode 100644 index 0000000..23b3acb --- /dev/null +++ b/docs/content/1.get-started/3.tips/2.server-side-calls.md @@ -0,0 +1,84 @@ +--- +title: Server Side Calls +--- + +# Server Side Calls + +You may need to call your procedure(s) directly from the server, `createCaller()` function returns you an instance of `RouterCaller` able to execute queries and mutations. + +## Input query example + +We create the router with a input query and then we call the asynchronous `greeting` procedure to get the result. + +::code-group + +```ts [server/trpc/trpc.ts] +import { initTRPC } from '@trpc/server' +import { z } from 'zod' + +const t = initTRPC.create() + +export const router = t.router({ + // Create procedure at path 'greeting' + greeting: t.procedure + .input(z.object({ name: z.string() })) + .query(({ input }) => `Hello ${input.name}`), +}) +``` + +```ts [server/api/greeting.post.ts] +import { caller } from '@/server/trpc/trpc' + +export default eventHandler(async (event) => { + const body = await getBody(event) + const caller = router.createCaller({}) + + const greeting = await caller.greeting({ name: body.name }) + + return { + greeting + } +}) +``` + +:: + +## Mutation example + +We create the router with a mutation and then we call the asynchronous `post` procedure to get the result. + +::code-group + +```ts [server/trpc/trpc.ts] +import { initTRPC } from '@trpc/server' +import { z } from 'zod' + +const posts = ['One', 'Two', 'Three'] + +const t = initTRPC.create() +const router = t.router({ + post: t.router({ + add: t.procedure.input(z.string()).mutation(({ input }) => { + posts.push(input) + return posts + }), + }), +}) +``` + +```ts [server/api/post.post.ts] +import { caller } from '@/server/trpc/trpc' + +export default eventHandler(async (event) => { + const body = await getBody(event) + const caller = router.createCaller({}) + + const post = await caller.post.add(body.post) + + return { + post + } +}) +``` + +::