Next.js 어댑터
비공식 베타 번역
이 페이지는 PageTurner AI로 번역되었습니다(베타). 프로젝트 공식 승인을 받지 않았습니다. 오류를 발견하셨나요? 문제 신고 →
팁
tRPC의 Next.js 지원은 단순한 어댑터 이상으로 훨씬 더 광범위합니다. 이 페이지에서는 어댑터 설정 방법에 대한 간략한 요약을 다루며, 전체 문서는 여기에서 확인할 수 있습니다
예시 애플리케이션
| Description | Links |
|---|---|
| Next.js Minimal Starter |
Next.js 예제
Next.js 프로젝트에서 tRPC 라우터를 제공하는 것은 매우 간단합니다. 아래와 같이 pages/api/trpc/[trpc].ts에 API 핸들러를 생성하면 됩니다:
pages/api/trpc/[trpc].tstsimport { createNextApiHandler } from '@trpc/server/adapters/next';import { createContext } from '../../../server/trpc/context';import { appRouter } from '../../../server/trpc/router/_app';// @link https://nextjs.org/docs/api-routes/introductionexport default createNextApiHandler({router: appRouter,createContext,});
pages/api/trpc/[trpc].tstsimport { createNextApiHandler } from '@trpc/server/adapters/next';import { createContext } from '../../../server/trpc/context';import { appRouter } from '../../../server/trpc/router/_app';// @link https://nextjs.org/docs/api-routes/introductionexport default createNextApiHandler({router: appRouter,createContext,});
CORS 처리 및 기타 고급 사용법
보통은 위와 같이 API 핸들러를 설정한 후 그대로 두어도 되지만, 때로는 추가로 수정하고 싶을 수 있습니다.
createNextApiHandler나 다른 프레임워크의 유사 함수로 생성된 API 핸들러는 단순히 req와 res 객체를 받는 함수입니다. 즉 핸들러로 전달하기 전에 이러한 객체를 수정할 수도 있습니다. 예를 들어 CORS를 활성화하는 등의 작업이 가능합니다.
pages/api/trpc/[trpc].tstsimport { createNextApiHandler } from '@trpc/server/adapters/next';import { createContext } from '../../../server/trpc/context';import { appRouter } from '../../../server/trpc/router/_app';// create the API handler, but don't return it yetconst nextApiHandler = createNextApiHandler({router: appRouter,createContext,});// @link https://nextjs.org/docs/api-routes/introductionexport default async function handler(req: NextApiRequest,res: NextApiResponse,) {// We can use the response object to enable CORSres.setHeader('Access-Control-Allow-Origin', '*');res.setHeader('Access-Control-Request-Method', '*');res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');res.setHeader('Access-Control-Allow-Headers', '*');// If you need to make authenticated CORS calls then// remove what is above and uncomment the below code// Allow-Origin has to be set to the requesting domain that you want to send the credentials back to// res.setHeader('Access-Control-Allow-Origin', 'http://example:6006');// res.setHeader('Access-Control-Request-Method', '*');// res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');// res.setHeader('Access-Control-Allow-Headers', 'content-type');// res.setHeader('Referrer-Policy', 'no-referrer');// res.setHeader('Access-Control-Allow-Credentials', 'true');if (req.method === 'OPTIONS') {res.writeHead(200);return res.end();}// finally pass the request on to the tRPC handlerreturn nextApiHandler(req, res);}
pages/api/trpc/[trpc].tstsimport { createNextApiHandler } from '@trpc/server/adapters/next';import { createContext } from '../../../server/trpc/context';import { appRouter } from '../../../server/trpc/router/_app';// create the API handler, but don't return it yetconst nextApiHandler = createNextApiHandler({router: appRouter,createContext,});// @link https://nextjs.org/docs/api-routes/introductionexport default async function handler(req: NextApiRequest,res: NextApiResponse,) {// We can use the response object to enable CORSres.setHeader('Access-Control-Allow-Origin', '*');res.setHeader('Access-Control-Request-Method', '*');res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');res.setHeader('Access-Control-Allow-Headers', '*');// If you need to make authenticated CORS calls then// remove what is above and uncomment the below code// Allow-Origin has to be set to the requesting domain that you want to send the credentials back to// res.setHeader('Access-Control-Allow-Origin', 'http://example:6006');// res.setHeader('Access-Control-Request-Method', '*');// res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');// res.setHeader('Access-Control-Allow-Headers', 'content-type');// res.setHeader('Referrer-Policy', 'no-referrer');// res.setHeader('Access-Control-Allow-Credentials', 'true');if (req.method === 'OPTIONS') {res.writeHead(200);return res.end();}// finally pass the request on to the tRPC handlerreturn nextApiHandler(req, res);}
라우트 핸들러
Next.js App Router를 시도 중이고 라우트 핸들러를 사용하고 싶다면, fetch 어댑터를 활용하면 됩니다. 이는 웹 표준 Request 및 Response 객체를 기반으로 구축되기 때문입니다:
app/api/trpc/[trpc]/route.tstsimport { fetchRequestHandler } from '@trpc/server/adapters/fetch';import { appRouter } from '~/server/api/router';function handler(req: Request) {return fetchRequestHandler({endpoint: '/api/trpc',req,router: appRouter,createContext: () => ({ ... })});}export { handler as GET, handler as POST };
app/api/trpc/[trpc]/route.tstsimport { fetchRequestHandler } from '@trpc/server/adapters/fetch';import { appRouter } from '~/server/api/router';function handler(req: Request) {return fetchRequestHandler({endpoint: '/api/trpc',req,router: appRouter,createContext: () => ({ ... })});}export { handler as GET, handler as POST };