Next.js アダプター
非公式ベータ版翻訳
このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
ヒント
tRPCのNext.jsサポートは、単なるアダプター以上の広範なものです。このページではアダプター設定の概要を説明します。完全なドキュメントについては、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';export defaultcreateNextApiHandler ({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';export defaultcreateNextApiHandler ({router :appRouter ,createContext ,});
CORSの処理と高度な使用法
通常は前述のAPIハンドラーを「設定して忘れる」だけで問題ありませんが、場合によってはさらにカスタマイズが必要になることもあります。
createNextApiHandlerで作成されたAPIハンドラー(および他フレームワークの同等機能)は、単にreqとresオブジェクトを受け取る関数です。つまり、ハンドラーに渡す前にこれらのオブジェクトを変更できます。例えばCORSを有効にする場合などです。
pages/api/trpc/[trpc].tstsimport type {NextApiRequest ,NextApiResponse } from 'next';import {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 yetconstnextApiHandler =createNextApiHandler ({router :appRouter ,createContext ,});// https://nextjs.org/docs/api-routes/introductionexport default async functionhandler (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);returnres .end ();}// finally pass the request on to the tRPC handlerreturnnextApiHandler (req ,res );}
pages/api/trpc/[trpc].tstsimport type {NextApiRequest ,NextApiResponse } from 'next';import {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 yetconstnextApiHandler =createNextApiHandler ({router :appRouter ,createContext ,});// https://nextjs.org/docs/api-routes/introductionexport default async functionhandler (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);returnres .end ();}// finally pass the request on to the tRPC handlerreturnnextApiHandler (req ,res );}
App Router(ルートハンドラー)
Next.jsのApp Routerを使用している場合は、代わりにfetchアダプターをご利用ください。App RouterのルートハンドラーはWeb標準のRequestおよびResponseオブジェクトに基づいているためです。完全な手順については、App Routerセットアップガイドを参照してください。
app/api/trpc/[trpc]/route.tstsimport {fetchRequestHandler } from '@trpc/server/adapters/fetch';import {createTRPCContext } from '../../trpc/init';import {appRouter } from '../../trpc/routers/_app';consthandler = (req :Request ) =>fetchRequestHandler ({endpoint : '/api/trpc',req ,router :appRouter ,createContext :createTRPCContext ,});export {handler asGET ,handler asPOST };
app/api/trpc/[trpc]/route.tstsimport {fetchRequestHandler } from '@trpc/server/adapters/fetch';import {createTRPCContext } from '../../trpc/init';import {appRouter } from '../../trpc/routers/_app';consthandler = (req :Request ) =>fetchRequestHandler ({endpoint : '/api/trpc',req ,router :appRouter ,createContext :createTRPCContext ,});export {handler asGET ,handler asPOST };