Saltar al contenido principal
Versión: 9.x

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

DescriptionURLLinks
Express server & procedure calls with node.js.n/a

Cómo añadir tRPC a un proyecto existente de Express.js

1. Instalar dependencias

bash
yarn add @trpc/server zod
bash
yarn 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.ts
ts
import * as trpc from '@trpc/server';
import { z } from 'zod';
const appRouter = trpc
.router()
.query('getUser', {
input: z.string(),
async resolve(req) {
req.input; // string
return { id: req.input, name: 'Bilbo' };
},
})
.mutation('createUser', {
// validate input with Zod
input: z.object({ name: z.string().min(5) }),
async resolve(req) {
// use your ORM of choice
return await UserModel.create({
data: req.input,
});
},
});
// export type definition of API
export type AppRouter = typeof appRouter;
server.ts
ts
import * as trpc from '@trpc/server';
import { z } from 'zod';
const appRouter = trpc
.router()
.query('getUser', {
input: z.string(),
async resolve(req) {
req.input; // string
return { id: req.input, name: 'Bilbo' };
},
})
.mutation('createUser', {
// validate input with Zod
input: z.object({ name: z.string().min(5) }),
async resolve(req) {
// use your ORM of choice
return await UserModel.create({
data: req.input,
});
},
});
// export type definition of API
export 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.ts
ts
import * as trpcExpress from '@trpc/server/adapters/express';
const appRouter = /* ... */;
const app = express();
// created for each request
const createContext = ({
req,
res,
}: trpcExpress.CreateExpressContextOptions) => ({}) // no context
type Context = trpc.inferAsyncReturnType<typeof createContext>;
app.use(
'/trpc',
trpcExpress.createExpressMiddleware({
router: appRouter,
createContext,
})
);
app.listen(4000);
server.ts
ts
import * as trpcExpress from '@trpc/server/adapters/express';
const appRouter = /* ... */;
const app = express();
// created for each request
const createContext = ({
req,
res,
}: trpcExpress.CreateExpressContextOptions) => ({}) // no context
type 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!

EndpointHTTP URI
getUserGET http://localhost:4000/trpc/getUser?input=INPUT

where INPUT is a URI-encoded JSON string.
createUserPOST http://localhost:4000/trpc/createUser

with req.body of type {name: string}