Express 适配器
示例应用
描述 | 链接 |
---|---|
使用 Node.js 的 Express 服务器 & 过程调用。 |
如何将 tRPC 添加到现有的 Express 项目
1. 安装依赖项
bash
yarn add @trpc/server zod
bash
yarn add @trpc/server zod
Zod 不是必需的依赖项,但它在下面的示例路由器中使用。
2. 创建一个 tRPC 路由器
实现您的 tRPC 路由器。下面给出了一个示例路由器
server.tsts
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();export const appRouter = t.router({getUser: t.procedure.input(z.string()).query((opts) => {opts.input; // stringreturn { id: opts.input, name: 'Bilbo' };}),createUser: t.procedure.input(z.object({ name: z.string().min(5) })).mutation(async (opts) => {// use your ORM of choicereturn await UserModel.create({data: opts.input,});}),});// export type definition of APIexport type AppRouter = typeof appRouter;
server.tsts
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();export const appRouter = t.router({getUser: t.procedure.input(z.string()).query((opts) => {opts.input; // stringreturn { id: opts.input, name: 'Bilbo' };}),createUser: t.procedure.input(z.object({ name: z.string().min(5) })).mutation(async (opts) => {// use your ORM of choicereturn await UserModel.create({data: opts.input,});}),});// export type definition of APIexport type AppRouter = typeof appRouter;
如果您的路由器文件开始变得太大,请将您的路由器拆分为多个子路由器,每个子路由器在自己的文件中实现。然后将它们合并到单个根 appRouter
中。
3. 使用 Express 适配器
tRPC 包含一个开箱即用的 Express 适配器。此适配器允许您将 tRPC 路由器转换为 Express 中间件。
server.tsts
import { initTRPC } from '@trpc/server';import * as trpcExpress from '@trpc/server/adapters/express';import express from 'express';// created for each requestconst createContext = ({req,res,}: trpcExpress.CreateExpressContextOptions) => ({}); // no contexttype Context = Awaited<ReturnType<typeof createContext>>;const t = initTRPC.context<Context>().create();const appRouter = t.router({// [...]});const app = express();app.use('/trpc',trpcExpress.createExpressMiddleware({router: appRouter,createContext,}),);app.listen(4000);
server.tsts
import { initTRPC } from '@trpc/server';import * as trpcExpress from '@trpc/server/adapters/express';import express from 'express';// created for each requestconst createContext = ({req,res,}: trpcExpress.CreateExpressContextOptions) => ({}); // no contexttype Context = Awaited<ReturnType<typeof createContext>>;const t = initTRPC.context<Context>().create();const appRouter = t.router({// [...]});const app = express();app.use('/trpc',trpcExpress.createExpressMiddleware({router: appRouter,createContext,}),);app.listen(4000);
您的端点现在可以通过 HTTP 访问!
端点 | HTTP URI |
---|---|
getUser | GET http://localhost:4000/trpc/getUser?input=INPUT 其中 INPUT 是一个 URI 编码的 JSON 字符串。 |
createUser | POST http://localhost:4000/trpc/createUser 使用 req.body 类型为 {name: string} |