定义路由器
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
信息
- 每个 procedure 可视为等同于 REST 端点
- 查询(queries)与变更(mutations)在实现层面没有实质差异,仅存在语义区别
- 路由器的定义规则对查询、变更和订阅均适用,但订阅需返回
Subscription实例
输入验证
tRPC 开箱即用支持 yup/superstruct/zod/myzod/自定义验证器等方案 - 查看测试套件
无输入示例
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`,};},});
使用 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;
使用 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;
使用 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;
方法链式调用
要添加多个端点,必须采用链式调用
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;