Express 适配器
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
示例应用
| Description | Links |
|---|---|
| Express server & procedure calls with Node.js. |
如何将 tRPC 添加到现有 Express 项目
1. 安装依赖
bashyarn add @trpc/server zod
bashyarn add @trpc/server zod
Zod 并非必需依赖,但下方示例路由中会使用到。
AI 代理
若您使用 AI 编程代理,请安装 tRPC 技能以优化代码生成效果:
bashnpx @tanstack/intent@latest install
bashnpx @tanstack/intent@latest install
2. 创建 tRPC 路由
实现你的 tRPC 路由。下方提供示例路由:
server.tstsimport {initTRPC } from '@trpc/server';import {z } from 'zod';export constt =initTRPC .create ();export constappRouter =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 {id : '1', ...opts .input };}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
server.tstsimport {initTRPC } from '@trpc/server';import {z } from 'zod';export constt =initTRPC .create ();export constappRouter =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 {id : '1', ...opts .input };}),});// export type definition of APIexport typeAppRouter = typeofappRouter ;
若路由文件过大,可将其拆分为多个独立文件实现的子路由,然后合并为单一根路由 appRouter。
3. 使用 Express 适配器
tRPC 内置了 Express 适配器,该适配器可将你的 tRPC 路由器转换为 Express 中间件。
server.tstsimport {initTRPC } from '@trpc/server';import * astrpcExpress from '@trpc/server/adapters/express';importexpress from 'express';// created for each requestconstcreateContext = ({req ,res ,}:trpcExpress .CreateExpressContextOptions ) => ({}); // no contexttypeContext =Awaited <ReturnType <typeofcreateContext >>;constt =initTRPC .context <Context >().create ();constappRouter =t .router ({// [...]});constapp =express ();app .use ('/trpc',trpcExpress .createExpressMiddleware ({router :appRouter ,createContext ,}),);app .listen (4000);
server.tstsimport {initTRPC } from '@trpc/server';import * astrpcExpress from '@trpc/server/adapters/express';importexpress from 'express';// created for each requestconstcreateContext = ({req ,res ,}:trpcExpress .CreateExpressContextOptions ) => ({}); // no contexttypeContext =Awaited <ReturnType <typeofcreateContext >>;constt =initTRPC .context <Context >().create ();constappRouter =t .router ({// [...]});constapp =express ();app .use ('/trpc',trpcExpress .createExpressMiddleware ({router :appRouter ,createContext ,}),);app .listen (4000);
现在你的端点已可通过 HTTP 访问!
| Endpoint | HTTP URI |
|---|---|
getUser | GET http://localhost:4000/trpc/getUser?input=INPUT where INPUT is a URI-encoded JSON string. |
createUser | POST http://localhost:4000/trpc/createUser with req.body of type {name: string} |