ルートハンドラー

フルスタックのapp/api/*/route.tsハンドラー、リライト、ローカルデーモンへのプロキシ。

ルートハンドラーは、Webの Request APIと Response APIを使って、app ディレクトリー内にAPIエンドポイントを定義します。

規約

app/api/health/route.tsts
export function GET(): Response {  return Response.json({ status: "ok" });}

GET、POST、PUT、PATCH、DELETE、HEAD または OPTIONS をエクスポートします。ハンドラーは、text dev、text start およびすべてのサーバー用デプロイアダプターで、ミドルウェアの後に実行されます。ルートセグメント設定で GET ハンドラーをキャッシュします。

動的ハンドラー

app/api/sessions/[id]/route.tsts
export async function GET(_req: Request, { params }: { params: { id: string } }) {  const session = await db.sessions.find(params.id);  return session ? Response.json(session) : new Response("Not found", { status: 404 });}

params の値はデコードされます。エンコードされたスラッシュまたはバックスラッシュ(%2F、%5C)を含むパスには 400 が返されるため、/ を含む可能性があるIDはクエリーパラメーターで渡すか、base64urlでエンコードします。

ストリーミング

サーバー送信イベントには ReadableStream を返します。

app/api/ticks/route.tsts
export function GET() {  let n = 0;  const stream = new ReadableStream({    start(c) {      setInterval(() => c.enqueue(`data: ${n++}\n\n`), 1000);    },  });  return new Response(stream, { headers: { "content-type": "text/event-stream" } });}

Rewrite

外部の転送先にはサーバーがプロキシとしてアクセスするため、ブラウザーはクロスオリジンリクエストを送信しません。

text.config.tsts
export default defineConfig({  rewrites: [{ source: "/api/opencode/:path*", destination: "http://127.0.0.1:4096/:path*" }],});

ローカルデーモンへのプロキシ接続

マシン上のプロセスにアクセスするには、proxy を使います。

text.config.tsts
export default defineConfig({  proxy: { "/api/opencode": { target: "http://127.0.0.1:4096", changeOrigin: true } },});

OpenCodeテンプレートは、この方法でローカルサーバーに接続します。

GitHubでこのページを編集