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

Cloudflare Worker报错:TypeError: 无法重建已使用请求体的Request

Cloudflare Worker 报错:TypeError: Cannot reconstruct a Request with a used body

我在Cloudflare Worker代码中实现了两个函数,调用时触发上述错误。经日志排查,报错发生在postData函数的let response = await fetch(request)行——已打印"checked cache",但未打印"Requested new token"。

已尝试的解决方案:

  • 通过request.clone()克隆请求后执行fetch
  • 重新创建相同的Request对象发起请求
  • 结合slice()复制data后创建Request

补充说明:使用Cloudflare Worker Modules,无法访问event;报错前打印request.bodyUsed结果为false。

相关代码如下:

async function getApiV2Token(env: Env): Promise<string> {
    let API_URL = await getApiUrl(env)
    let API_CLIENT_ID = await getApiClientId(env)
    let API_CLIENT_SECRET = await getApiClientSecret(env)

    let apiUrl = `${API_URL}/auth`
    let data = `client_id=${API_CLIENT_ID}&client_secret=${API_CLIENT_SECRET}`

    let response, responseJSON 

    try {
        response = await postData(apiUrl, data)
        responseJSON = await response.json()
    } catch (e) {
        console.log(`Error: ${e}.`)
        return ""
    }
    return responseJSON.auth_token
}


async function postData(url: string, data: string): Promise<Response> {
    let request = new Request(url, {
        method : 'POST',
        body : data,
        headers: {
            'User-Agent': 'cloudflare-worker',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        redirect : 'manual'
    })
    
    let cache = caches.default
    let cachedResponse = await cache.match(request.url)
    if (cachedResponse) {
        return cachedResponse
    }
    console.log("checked cache")

    let response = await fetch(request)

    console.log("Requested new token")

    let newResponseForExpiresIn = response.clone()
    let newResponseForExpiresInJSON = await newResponseForExpiresIn.json()
    let expires_in = newResponseForExpiresInJSON.expires_in
    let newResponseForHeader = response.clone()
    let newResponseToCache = new Response(newResponseForHeader.body, newResponseForHeader)
    newResponseToCache.headers.set('Cache-Control', `max-age=${expires_in - API_TOKEN_GRACE_PERIOD}`)
    cache.put(request.url, newResponseToCache)

    return response
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:55:34