Express 어댑터
예제 앱
| 설명 | 링크 |
|---|---|
| Node.js를 사용하여 Express 서버에서 & 프로시저 호출을 수행합니다. |
기존 Express 프로젝트에 tRPC 추가하기
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를 통해 사용할 수 있습니다!
| 엔드포인트 | 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}입니다 |