You need to enable JavaScript to run this app. 如何使用Axios实现API请求失败后移除URL参数发起新请求
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Axios实现API请求失败后移除URL参数发起新请求

带参数降级重试的Axios请求实现

这个需求完全可以实现,你之前的代码没有达到预期,主要有两个核心问题:

  1. 没适配Axios的错误触发规则:Axios默认行为是,只要接口返回的HTTP状态码不在2xx成功区间(比如404、500等),就会直接抛出错误进入外层catch捕获块,根本不会执行到你写的res.data.statusCode == 404判断分支,自然没法触发移除body参数后的重试逻辑。
  2. 存在语法错误:用const声明的URL常量是无法被重新赋值的,运行到后续修改URL的代码行时会直接抛出TypeError。

最初的无效尝试代码

try {
    const URL = 'http://api.evoximages.com/api/v1/vehicles?make=' + make + '&model=' + model + '&year=' + year + '&pid=2&ptid=41&body=' + body;
    let res = await axios.get(URL);

    if (res.data.statusCode == 404) {
        URL = 'http://api.evoximages.com/api/v1/vehicles?make=' + make + '&model=' + model + '&year=' + year + '&pid=2&ptid=41';
        res = await axios.get(URL);
        return res.data.data;
    } else {
        return res.data.data;
    }
} catch (err) {
    return err;
}

可用实现方案

既然所有首次请求的错误(包括404类响应)都会进入catch块,就不需要在成功分支做状态码校验,也避免了重复给常量赋值的语法错误,直接在catch块内嵌套发起移除body参数的新请求即可:

try {
    const originalURL = 'http://api.evoximages.com/api/v1/vehicles?make=' + make + '&model=' + model + '&year=' + year + '&pid=2&ptid=41&body=' + body;
    let res = await axios.get(originalURL);
    return res.data.data;
} catch (err) {
    try {
        // 移除body参数的重试新请求
        const retryURL = 'http://api.evoximages.com/api/v1/vehicles?make=' + make + '&model=' + model + '&year=' + year + '&pid=2&ptid=41';
        let retryRes = await axios.get(retryURL);
        return retryRes.data.data;
    } catch (retryErr) {
        return retryErr;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 05:06:10