浅谈axios.interceptors拦截器

浅谈axios.interceptors拦截器,第1张

一、引言:

        拦截器顾名思义就是对请求的拦截,分别为请求拦截器响应拦截器, 执行顺序: 请求拦截器 -> api请求 -> 响应拦截器axios实现这个拦截器机制如下:

        不难发现, 这其实就是一个顺序链表能实现的,把请求拦截器的函数推在前面, api请求的核心方法放在中间, 响应拦截器放在数组后面,遍历执行链表就实现了拦截器的顺序执行过程。

二、拦截器的作用

        a. 统计api从发起请求到返回数据需要的时间

        b. 配置公共的请求头,加载d窗等

        c. 对响应状态码做拦截,比入后端返回400或500的状态码, 返回对应错误信息

三、拦截器的实现

        一般来说请求和响应拦截器会同时配置:

        0. 引入axios模块,并创建实例

import axios from "axios";

const axios = axios.create({
  timeout: 3000,
  withCredentials: true
})

        1. 请求拦截器

                在请求发送前统一执行某些 *** 作,常用在请求头中处理token等        

axios.interceptors.request.use(
  (config) => {  
    Indicator.open({  //加载提示框
        text: '加载中...',
        spinnerType: 'fading-circle'
      });

    if (localStorage.token) {
      config.headers["Authorization"] = "Bearer " + localStorage.token;
    }
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);

        2. 响应拦截器

axios.interceptors.response.use(
  (config) => {
    Indicator.close();  //关闭加载框
    return config;
  },
  (e) => {
    if (e.response.status === 403 || e.response.status === 401) {
      return Promise.reject("Nopermission");
    }
    if (e.response.status >= 500) {
      return Promise.reject("serverError");
    }
    return Promise.reject(e);
  }
);

export default axios;
四、总结

    axios 把用户注册的每个拦截器构造成一个 promise.then 所接受的参数,把相对应的拦截器数组进行调用链的头部和尾部组装,在运行时把所有的拦截器按照一个 promise 链的形式以此执行。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/758459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存