Uso con Express.js
Traducción Beta No Oficial
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Aplicación de ejemplo
| Description | URL | Links |
|---|---|---|
| Express server & procedure calls with node.js. | n/a |
Cómo añadir tRPC a un proyecto existente de Express.js
1. Instalar dependencias
bashyarn add @trpc/server zod
bashyarn add @trpc/server zod
Zod no es una dependencia obligatoria, pero se utiliza en el enrutador de ejemplo a continuación.
2. Crear un router de tRPC
Implementa tu router de tRPC. A continuación se muestra un ejemplo de router:
server.tstsimport * as trpc from '@trpc/server';import { z } from 'zod';const appRouter = trpc.router().query('getUser', {input: z.string(),async resolve(req) {req.input; // stringreturn { id: req.input, name: 'Bilbo' };},}).mutation('createUser', {// validate input with Zodinput: z.object({ name: z.string().min(5) }),async resolve(req) {// use your ORM of choicereturn await UserModel.create({data: req.input,});},});// export type definition of APIexport type AppRouter = typeof appRouter;
server.tstsimport * as trpc from '@trpc/server';import { z } from 'zod';const appRouter = trpc.router().query('getUser', {input: z.string(),async resolve(req) {req.input; // stringreturn { id: req.input, name: 'Bilbo' };},}).mutation('createUser', {// validate input with Zodinput: z.object({ name: z.string().min(5) }),async resolve(req) {// use your ORM of choicereturn await UserModel.create({data: req.input,});},});// export type definition of APIexport type AppRouter = typeof appRouter;
Si tu archivo de router empieza a volverse demasiado grande, divide tu router en varios subrouters implementados cada uno en su propio archivo. Luego fusiónalos en un único appRouter raíz.
3. Usa el adaptador de Express.js
tRPC incluye un adaptador para Express.js listo para usar. Este adaptador te permite convertir tu router de tRPC en un middleware de Express.js.
server.tstsimport * as trpcExpress from '@trpc/server/adapters/express';const appRouter = /* ... */;const app = express();// created for each requestconst createContext = ({req,res,}: trpcExpress.CreateExpressContextOptions) => ({}) // no contexttype Context = trpc.inferAsyncReturnType<typeof createContext>;app.use('/trpc',trpcExpress.createExpressMiddleware({router: appRouter,createContext,}));app.listen(4000);
server.tstsimport * as trpcExpress from '@trpc/server/adapters/express';const appRouter = /* ... */;const app = express();// created for each requestconst createContext = ({req,res,}: trpcExpress.CreateExpressContextOptions) => ({}) // no contexttype Context = trpc.inferAsyncReturnType<typeof createContext>;app.use('/trpc',trpcExpress.createExpressMiddleware({router: appRouter,createContext,}));app.listen(4000);
¡Tus endpoints ahora están disponibles vía 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} |