细谈Axios中那些不为人知的秘密!一文读懂Axios(三)

简介: 细谈Axios中那些不为人知的秘密!一文读懂Axios

Axios拦截器、错误处理与取消请求

1、拦截器

什么是拦截器?

在请求前或响应被处理前拦截他们,分为两种:请求拦截器与响应拦截器。

拦截器的使用方法

请求拦截器

// 请求拦截器
axios.interceptors.request.use(config => { 
  // 在发送请求前做些什么
  return config;
}, err=>{ 
    // 在请求错误的时候的逻辑处理
    return Promise.reject(err)
});

响应拦截器

// 响应拦截器
axios.interceptors.response.use(res => { 
  // 在请求成功后的数据处理
  return res;
}, err=>{ 
    // 在响应错误的时候的逻辑处理
    return Promise.reject(err)
});

取消拦截器

let inter = axios.interceptors.request.use(config=>{
    config.header={ 
        auth:true
    }
    return config
})
axios.interceptors.request.eject(inter)

实用举例A:登录权限

需要token的接口实例

let instance = axios.create({ });
instance.interceptors.request.use(config=>{ 
    config.headers.token = '';
    return config
})

不需要token的接口实例

let newInstance = axios.create({ });

实用举例B:移动端开发数据加载loading动画

// 请求的加载动画loading
let instance_phone = axios.create({ });
instance_phone.interceptors.request.use(config=>{ 
    $('#loading').show();
    return config
})
instance_phone.interceptors.response.use(res=>{ 
    $('#loading').hide();
    return res
})

备注:实现的效果是请求数据的时候显示loading动画,数据响应后隐藏loading动画。

2、错误处理,拦截

结合请求拦截器与响应拦截器来说,不管是请求错误还是响应错误,都会执行catch方法。

// 请求拦截器
    axios.interceptors.request.use(
      config => { 
        // 在发送请求前做些什么
        return config;
      },
      err => { 
        // 在请求错误的时候的逻辑处理
        return Promise.reject(err);
      }
    );
    // 响应拦截器
    axios.interceptors.response.use(
      res => { 
        // 在请求成功后的数据处理
        return res;
      },
      err => { 
        // 在响应错误的时候的逻辑处理
        return Promise.reject(err);
      }
    ); 
        axios
      .get("data.json")
      .then(res => { 
        console.log(res);
      })
      .catch(err => { 
        console.log(res);
      });

错误处理举例

在实际开发中,不会再每次网络请求的时候,使用catch方法,可以添加统一的错误处理方法。代码如下:

// 请求错误处理
    let instance = axios.create({ });
    instance.interceptors.request.use(
      config => { 
        return config;
      },
      err => { 
        // 请求错误的常见状态码:4XX 401-请求超时 404-mot found
        $("#error").show();
        setTimeout(()=>{ 
           $("#error").hide(); 
        }, 2000)
        return Promise.reject(err);
      }
    );
    // 响应错误处理
    instance.interceptors.response.use(
      res => { 
        return res;
      },
      err => { 
        // 响应错误的常见状态码 5XX 500-服务器错误 502-服务器重启
        $("#error").show();
        setTimeout(()=>{ 
           $("#error").hide(); 
        }, 2000)
        return Promise.reject(err);
      }
    );
    instance.get("/data.json").then(res=>{ 
        console.log(res,'请求成功')
    }).catch(err=>{ 
        console.log(err,'除了拦截器设置的处理之外的其他处理')
    })

思路分析:首先创建实例,给实例设置请求拦截器与响应拦截器。


(1)请求错误的常见状态码以4开头,如401-请求超时、404-接口未找到;

(2)响应错误的常见状态码以5开头,如500-服务器错误、502-服务器重启等。

(3)处理设置请求拦截器与响应拦截器的操作外,如果还要其他操作,我们可以在请求的时候,在使用catch方法。

3、取消请求(不常用)

let source = axios.CancelToken.source();
axios
  .get("/data.json", { 
    cancelToken: source.token
  })
  .then(res => { 
    console.log(res);
  }).catch(err=>{ 
      console.log(err)
  })
// 取消请求(参数msg)
  source.cancel('自定的的字符串可选')

应用场景

在查询数据的时候,很长时间(3-5s)仍未获取数据,这个时候需要取消请求。

相关文章
|
7月前
|
JSON JavaScript 前端开发
从零开始教会你Axios
从零开始教会你Axios
61 0
|
3月前
|
Python
HTTP协议不再是迷!Python网络请求实战,带你走进网络世界的奥秘
本文介绍了HTTP协议,它是互联网信息传递的核心。作为客户端与服务器通信的基础,HTTP请求包括请求行、头和体三部分。通过Python的`requests`库,我们可以轻松实现HTTP请求。本文将指导你安装`requests`库,并通过实战示例演示如何发送GET和POST请求。无论你是想获取网页内容还是提交表单数据,都能通过简单的代码实现。希望本文能帮助你在Python网络请求的道路上迈出坚实的一步。
71 0
|
4月前
|
JavaScript 前端开发 C++
【Vue.js的终极对决】服务端渲染VS客户端渲染:一场关乎速度与SEO的生死较量!
【8月更文挑战第30天】Vue.js 是一个流行的 JavaScript 框架,支持服务端渲染(SSR)和客户端渲染。SSR 在服务器生成完整 HTML,有利于 SEO 并缩短首屏加载时间,但增加服务器负担;客户端渲染则在浏览器生成页面,提升交互性,降低服务器负载。本文通过代码示例对比两者优劣,并提供选择指南,帮助开发者根据 SEO 需求、交互性需求及服务器资源等条件,选择合适的渲染方式,从而优化应用性能和用户体验。
85 0
|
4月前
|
前端开发 应用服务中间件 API
"揭秘!面试官必问:你是如何巧妙绕过跨域难题的?前端代理VS服务器端CORS,哪个才是你的秘密武器?"
【8月更文挑战第21天】在软件开发中,尤其前后端分离架构下,跨域资源共享(CORS)是常见的挑战。主要解决方案有两种:一是服务器端配置CORS策略,通过设置响应头控制跨域访问权限,无需改动前端代码,增强安全性;二是前端代理转发,如使用Nginx或Webpack DevServer在开发环境中转发请求绕过同源策略,简化开发流程但不适用于生产环境。生产环境下应采用服务器端CORS策略以确保安全稳定。
59 0
|
7月前
|
存储 JSON 缓存
【源码共读】axios的46个工具函数
【源码共读】axios的46个工具函数
155 0
|
Web App开发 JSON JavaScript
细谈Axios中那些不为人知的秘密!一文读懂Axios(一)
细谈Axios中那些不为人知的秘密!一文读懂Axios
262 0
细谈Axios中那些不为人知的秘密!一文读懂Axios(一)
细谈Axios中那些不为人知的秘密!一文读懂Axios(二)
细谈Axios中那些不为人知的秘密!一文读懂Axios
171 0
|
JSON JavaScript 数据格式
细谈Axios中那些不为人知的秘密!一文读懂Axios(四)
细谈Axios中那些不为人知的秘密!一文读懂Axios
157 0
|
前端开发 安全 Shell
对象准备入手前端开发,我连夜给ta准备了这篇git指南之终极奥义
对象是真的,连夜码字是真的,Git指南也是真的
256 0
对象准备入手前端开发,我连夜给ta准备了这篇git指南之终极奥义
|
前端开发
前端工作总结224-阅读代码之axios
前端工作总结224-阅读代码之axios
89 0