Handlery tras

Handlery full-stack app/api/*/route.ts, przepisywanie adresów i proxy do lokalnego demona.

Handlery tras definiują endpointy API w katalogu app, korzystając z interfejsów Web API Request i Response.

Konwencja

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

Eksportuj GET, POST, PUT, PATCH, DELETE, HEAD lub OPTIONS. Handlery działają przy uruchomieniu text dev, text start i na każdym serwerowym adapterze wdrożenia, po middleware. Buforuj handlery GET za pomocą konfiguracji segmentu trasy.

Handlery dynamiczne

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 });}

Wartości params są dekodowane. Ścieżka z zakodowanym ukośnikiem lub ukośnikiem odwrotnym (%2F, %5C) otrzymuje kod 400, więc przekazuj identyfikatory, które mogą zawierać /, w parametrze zapytania lub koduj je jako base64url.

Przesyłanie strumieniowe

Zwróć ReadableStream dla zdarzeń wysyłanych przez serwer:

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" } });}

Reguły Rewrite

Serwer pośredniczy w połączeniach do zewnętrznych adresów docelowych, więc przeglądarka nie wysyła żądań do innego źródła.

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

Pośredniczenie w połączeniach z lokalnym demonem

Użyj proxy, aby połączyć się z procesem na swoim komputerze:

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

W ten sposób szablon OpenCode łączy się z lokalnym serwerem.

Edytuj tę stronę w serwisie GitHub