axios拦截器

466 阅读2分钟

axios拦截器

什么是axios拦截器,为什么要使用拦截器?

我们通常使用axios与后台进行数据交互,axios是基于promise封装的库,可以运行在浏览器端和node环境中 拦截器就是每一次的请求和响应,然后做相应的处理。 请求拦截器它可以统一在你发送请求前在请求体里添加上tokne; 响应拦截器是在接收响应之后进行的一些操作,比如返回登录状态失效,需要重新登录的时候,就给它跳转到登录页面

axios官网:www.axios-http.cn/

axios特性:

  1. ​ 拦截请求和响应
  2. 取消请求
  3. 转换json
  4. 客户端防御XSRF等

使用拦截器的原因:

若出现请求数多的情况下,我们将会用到axios的一个API 拦截器

页面发送http请求,很多情况我们要对请求和其响应进行特定的处理,如果每个请求都附带后端返回的token,我们需要在拿到response之前loading动画展示等

拦截器的分类:

拦截器分为 请求( request)拦截器 和 响应( response )拦截器

拦截器的使用:在请求或响应被then或catch处理前拦截它们

(请求拦截器)

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

举例:

// http request 拦截器
axios.interceptors.request.use(
    config => {
        if (store.state.token) { 
         // 判断是否存在 token, 如果存在的话, 则每个 http header 都加上 token
            config.headers.Authorization = `token ${store.state.token}`;
        }
        return config;
    },
    err => {
        return Promise.reject(err);
    });

(响应拦截器)

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

举例:

// http response 拦截器
axios.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    // 返回 401 清除 token 信息并跳转到登录页面
                    store.commit(types.LOGOUT);
                    router.replace({
                        path: 'login',
                        query: {redirect: router.currentRoute.fullPath}
                    })
            }
        }
        return Promise.reject(error.response.data)  
         // 返回接口返回的错误信息
    });

还比如说 很多功能 都需要和服务器交互,发送网络请求

上传头像,网络很慢,上传的文件很大

整个页面 没有相应的 状态

可以根据发送的请求来 显示加载中 axios内置的拦截器代码功能 在任意的请求

在发送请求前 拦截 处理一下 显示加载中

在数据响应来 拦截 处理一下 关闭加载中