时光绘梦集

返回首页
随机箴言:常在河边走,哪有不湿鞋。在危险的边缘试探,总有遭遇危险的那一刻。

正文区域

边缘函数操作请求主体


夏夜万年 |2025-12-13 04:52

记录一下本次遇到的问题和最终解决办法。

我前端通过fetch发送数据,使用post方法,把一个数组转为json字符串,然后设置body为这个json字符串,请求到edgeone pages的边缘函数。

然后问题出现了,我直接把这个const body = context.request.body;输出的话,好像没有问题。

但是,一旦对这个值进行任何一次操作,最后输出的就是一个空对象。

我最开始没发现,还以为是官方出了bug。具体过程不说了,我没有调试工具,全是手机编辑代码,上传代码仓库,然后执行,修改,再执行,搞了一天,最后才发现的。

最终原因,因为请求主体是一个流,只能读取一次,任何二次读取都会变成空对象。比如用一个变量引用它,这时候就自动读取了一次,然后这个变量进行任何一点修改,就会再次读取它,导致结果变成空对象,

最终解决办法,在读取它之前,先用clone方法克隆对象,然后再操作克隆的变量,如下方示例,我的请求主体是一个数组转成的json字符串,先克隆,然后把json字符串直接转为新的数组。再次操作这个数组就没问题了,

const clonedRequest = context.request.clone();
const body = await clonedRequest.json();