路由处理程序

全栈 app/api/*/route.ts 处理程序、重写和本地守护进程代理。

路由处理程序使用 Web Request 和 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" } });}

重写

外部目标由服务器代理,因此浏览器不会发起跨源请求。

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 上编辑此页