Usage with Express.js
#
Example appDescription | URL | Links |
---|---|---|
Express server & procedure calls with node.js. | n/a |
#
How to add tRPC to existing Express.js project#
1. Install depsyarn add @trpc/server zod
Zod isn't a required dependency, but it's used in the sample router below.
#
2. Create a tRPC routerImplement your tRPC router. A sample router is given below:
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 APIexport type AppRouter = typeof appRouter;
If your router file starts getting too big, split your router into several subrouters each implemented in its own file. Then merge them into a single root appRouter
.
#
3. Use the Express.js adaptertRPC includes an adapter for Express.js out of the box. This adapter lets you convert your tRPC router into an Express.js middleware.
import * 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: () => null, // no context }));
app.listen(4000);
Your endpoints are now available via 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} |