Definiera Router
Inofficiell Beta-översättning
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
info
- En procedure kan ses som motsvarigheten till en REST-endpoint.
- Det finns ingen intern skillnad mellan queries och mutations förutom semantisk.
- Att definiera en router är detsamma för queries, mutations och prenumerationer med undantaget att prenumerationer måste returnera en
Subscription-instans.
Validering av indata
tRPC fungerar out-of-the-box med yup/superstruct/zod/myzod/egna validerare/[..] - se test suite
Exempel utan indata
tsximport * as trpc from '@trpc/server';// [...]export const appRouter = trpc.router<Context>()// Create procedure at path 'hello'.query('hello', {resolve({ ctx }) {return {greeting: `hello world`,};},});
tsximport * as trpc from '@trpc/server';// [...]export const appRouter = trpc.router<Context>()// Create procedure at path 'hello'.query('hello', {resolve({ ctx }) {return {greeting: `hello world`,};},});
Med Zod
tsximport * as trpc from '@trpc/server';import { z } from 'zod';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: z.object({text: z.string().nullish(),}).nullish(),resolve({ input }) {return {greeting: `hello ${input?.text ?? 'world'}`,};},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import { z } from 'zod';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: z.object({text: z.string().nullish(),}).nullish(),resolve({ input }) {return {greeting: `hello ${input?.text ?? 'world'}`,};},});export type AppRouter = typeof appRouter;
Med Yup
tsximport * as trpc from '@trpc/server';import * as yup from 'yup';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: yup.object({text: yup.string().required(),}),resolve({ input }) {return {greeting: `hello ${input?.text ?? 'world'}`,};},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import * as yup from 'yup';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: yup.object({text: yup.string().required(),}),resolve({ input }) {return {greeting: `hello ${input?.text ?? 'world'}`,};},});export type AppRouter = typeof appRouter;
Med Superstruct
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: t.object({/*** Also supports inline doc strings when referencing the type.*/text: t.defaulted(t.string(), 'world'),}),resolve({ input }) {return {greeting: `hello ${input.text}`,};},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';import * as t from 'superstruct';// [...]export const appRouter = trpc.router<Context>().query('hello', {input: t.object({/*** Also supports inline doc strings when referencing the type.*/text: t.defaulted(t.string(), 'world'),}),resolve({ input }) {return {greeting: `hello ${input.text}`,};},});export type AppRouter = typeof appRouter;
Metodkedjning
För att lägga till flera endpoints måste du kedja anropen
tsximport * as trpc from '@trpc/server';// [...]export const appRouter = trpc.router<Context>().query('hello', {resolve() {return {text: `hello world`,};},}).query('bye', {resolve() {return {text: `goodbye`,};},});export type AppRouter = typeof appRouter;
tsximport * as trpc from '@trpc/server';// [...]export const appRouter = trpc.router<Context>().query('hello', {resolve() {return {text: `hello world`,};},}).query('bye', {resolve() {return {text: `goodbye`,};},});export type AppRouter = typeof appRouter;