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

如何修改Post请求Body?Cloudflare Workers脚本修改请求体求助

解决Cloudflare Workers中修改POST请求体的问题

嘿,我来帮你搞定这个问题!你说得完全对——request.body是一个ReadableStream,没法直接用JSON.parse()解析,得先把它转换成可操作的JSON对象才行。下面是修改后的完整可运行脚本,我会一步步给你讲清楚关键步骤:

完整工作代码

addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  // 仅处理POST请求,避免其他方法报错
  if (request.method !== "POST") {
    return new Response("Method not allowed", { status: 405 });
  }

  try {
    // 1. 将ReadableStream请求体解析为JSON对象
    const requestBody = await request.json();
    
    // 2. 判断并修改指定字段
    if (requestBody.name2 === "value2") {
      requestBody.name2 = "NewValue";
    }

    // 3. 将修改后的对象转为JSON字符串,作为响应体
    const modifiedBody = JSON.stringify(requestBody);

    // 配置CORS头部(可根据实际需求调整)
    const corsHeaders = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "POST, OPTIONS",
      "Access-Control-Allow-Headers": "Content-Type"
    };

    // 4. 返回修改后的响应
    return new Response(modifiedBody, {
      headers: {
        "Content-Type": "application/json",
        ...corsHeaders
      }
    });
  } catch (error) {
    // 处理非法JSON请求体的情况
    return new Response("Invalid JSON body", { status: 400 });
  }
}

关键步骤解析

  • 读取请求体:用await request.json()是最简便的方式,它会自动把ReadableStream转换成JSON对象,不用手动处理流的读取和字符串解析。
  • 修改字段值:直接操作解析后的JSON对象就行,判断name2的值是否为value2,符合条件就替换成NewValue。
  • 生成响应:Response的body不能直接传JSON对象,得用JSON.stringify()把修改后的对象转成字符串。
  • CORS处理:我在示例里补全了基础的CORS头部配置,你可以根据自己的需求调整允许的域名、方法等。
  • 错误捕获:加了try/catch块,如果请求体不是合法的JSON,会返回400错误,避免脚本崩溃。

注意事项

request.json()只能调用一次,因为流被读取后就会耗尽。如果你的逻辑需要多次使用请求体内容,可以先把它转成字符串存储:

const bodyText = await request.text();
const requestBody = JSON.parse(bodyText);
// 之后可以重复使用bodyText或者requestBody

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:40