如何修改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
相关产品推荐
相关产品推荐

