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

使用Fetch发送DELETE请求失败(Axios可正常运行)

解决Fetch实现Strava Webhook订阅删除的错误问题

问题背景

Axios实现的Strava Webhook订阅删除方法可正常运行,但改用Fetch实现时触发错误,错误信息如下:

{"message":"请求错误","errors":[{"resource":"推送订阅","field":"client_id","code":"缺失"},{"resource":"推送订阅","field":"client_secret","code":"缺失"}]}

核心差异分析

Axios版本中,client_id和client_secret是作为URL查询参数发送的(通过params配置);而Fetch版本错误地将这两个参数放在请求体中,同时用JSON.stringify生成的内容与设置的Content-Type: application/x-www-form-urlencoded格式不匹配,且Strava的DELETE订阅API并不支持从请求体读取认证参数。

修正后的Fetch代码

const deleteSubscriptions = async (subscription: number) =>{
    const url = new URL(`${CONFIG.STRAVA_API_BASE_URL}/push_subscriptions/${subscription}`);
    // 向URL添加认证查询参数
    url.searchParams.append('client_id', CONFIG.STRAVA_CLIENT_ID);
    url.searchParams.append('client_secret', CONFIG.STRAVA_CLIENT_SECRET);
    
    try{
        const res = await fetch(url.toString(), {
            method: "DELETE",
            headers:{
                "Accept": "application/json"
            }
        });
        
        if (!res.ok) {
            const errorData = await res.json();
            console.error('删除订阅失败:', errorData);
            return;
        }
        
        const data = await res.json();
        console.log('订阅删除成功:', data);
    }catch (err: any){
        console.error('请求发生错误:', err);
    }
}

修正说明

  1. 使用URL对象构建带查询参数的请求地址,确保参数正确编码并附加到URL末尾,符合Strava API的要求
  2. 移除了错误的请求体配置,DELETE请求无需携带body,Strava会从URL查询参数中读取认证信息
  3. 添加了响应状态检查,在非成功状态下单独处理错误信息,避免解析JSON时抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:16:18