You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为HTTP POST请求返回多个部分响应?Oak框架与Supabase Edge函数场景

在Oak框架中实现多部分响应(Supabase Edge函数)

能否通过Oak实现?

可以。Oak完全支持流式HTTP响应,这正是实现多部分响应的核心方式。你可以利用Deno的ReadableStream API,结合Oak的上下文对象,分批次向客户端发送响应内容。

示例代码

以下是一个在Supabase Edge函数中使用Oak实现多部分POST响应的示例:

import { Application, Router } from "https://deno.land/x/oak@v12.6.1/mod.ts";

const router = new Router();

router.post("/stream-response", async (ctx) => {
  // 创建可读流用于分块发送数据
  const stream = new ReadableStream({
    async start(controller) {
      // 发送第一部分响应
      controller.enqueue(new TextEncoder().encode("第一部分响应内容\n"));
      await new Promise(resolve => setTimeout(resolve, 1000)); // 模拟异步业务处理

      // 发送第二部分响应
      controller.enqueue(new TextEncoder().encode("第二部分响应内容\n"));
      await new Promise(resolve => setTimeout(resolve, 1000));

      // 结束流传输
      controller.close();
    },
  });

  // 设置响应头,按需调整内容类型
  ctx.response.headers.set("Content-Type", "text/plain; charset=utf-8");
  // 将流作为响应体返回
  ctx.response.body = stream;
});

const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());

// Supabase Edge函数启动逻辑
await app.listen({ port: Deno.env.get("PORT") ? parseInt(Deno.env.get("PORT")!) : 8000 });

客户端会先接收第一部分内容,等待1秒后收到第二部分,最终响应结束。你可以根据业务需求,在controller.enqueue中发送不同格式的内容块(如JSON片段、HTML片段等)。

是否需要其他中间件?

通常不需要额外中间件。Oak本身已封装Deno的HTTP能力,直接使用流式响应即可满足多部分返回需求。如果你的场景需要更复杂的多部分格式(如反向输出multipart/form-data),可手动构造响应头和流内容实现,无需依赖第三方中间件。

若希望简化流式响应编写,也可直接使用Deno原生HTTP API(不通过Oak),代码更轻量化:

Deno.serve(async (req) => {
  if (req.method !== "POST") {
    return new Response("Method not allowed", { status: 405 });
  }

  const stream = new ReadableStream({
    async start(controller) {
      controller.enqueue(new TextEncoder().encode("第一部分\n"));
      await new Promise(resolve => setTimeout(resolve, 1000));
      controller.enqueue(new TextEncoder().encode("第二部分\n"));
      controller.close();
    },
  });

  return new Response(stream, {
    headers: { "Content-Type": "text/plain" },
  });
});

内容的提问来源于stack exchange,提问作者sanket patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:54:59