封装axios请求

import axios from 'axios'
import router from '@/router'
axios.defaults.baseURL = system.requestBaseUrl; // 配置axios请求的地址
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.crossDomain = true;
// axios.defaults.withCredentials = true;  //设置cross跨域 并设置访问权限 允许跨域携带cookie信息
axios.defaults.headers.common['Authorization'] = ''; // 设置请求头为 Authorization
// 请求拦截器
axios.interceptors.request.use(
  config => {
    //验证登录,并将token放入header
    let url = config.url;
    // console.log('url+======'+url)
    var token = sessionStorage.getItem('token');
    if (url == '/user/sendMsgCode') {
      token = 'token';
    }
    if (!token) { //未登录
      //进入登录页
      if (sessionStorage.getItem('uname')) {
        sessionStorage.clear()
        Modal.error({
          title: '登录失效或请求失败!',
          content: '',
          onOk() {
            router.push('/login');
            location.reload(); //强制刷新
          }
        });
        return
      }
      router.push('/login');
    }
    // console.log(config);
    config.headers['token'] = token;

    return config;
  },
  error => {
    return Promise.error(error);
  }
);

axios.interceptors.response.use(
  response => {
    // console.log('response',response);
    // 否则的话抛出错误
    if (response.status === 200) { //
      if (response.headers['token']) { //刷新token
        // console.log(response.headers['token']);
        sessionStorage.setItem('token', response.headers['token']);
      }
      if (response.headers['verifyCode']) { //验证码
        sessionStorage.setItem('verifyCode', response.headers['verifyCode']);
      }
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  error => {
    if (error.response && error.response.status) {
      switch (error.response.status) {
        case 401:
          //删除token
          sessionStorage.removeItem('token');
          let path = router.history.current.path;
          console.log('path', path)
          if (path != '/login') { //登录页和初次进首页不需要确认提示
            if (path == '/') { //直接进首页
              router.push('/login');
            } else {
              toLogin();
            }
          }
          break;

        case 403:
          // vant.Toast.fail("登录过期,请关闭重新进入。");
          // 清除token
          break;

          // 404请求不存在
        case 404:
          // vant.Toast.fail("您访问的网页不存在。");
          break;
          // 其他错误,直接抛出错误提示
        default:
          // vant.Toast.fail(error.response.data.message);
      }
      return Promise.reject(error.response);

    } else { //未知异常
      if (error == 'Error: Network Error') { //网络请求失败
        let path = router.history.current.path;
        if (path != '/login') { //登录页和初次进首页不需要确认提示
          Modal.error({
            title: '登录失效或请求失败!',
            content: '',
            onOk() {
              router.push('/login');
              location.reload(); //强制刷新
            }
          });
        }
      }
    }
  });

axios.$get = function (url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
    }).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  })
}
axios.$downLoad = function (url, params) {
  return new Promise((resolve, reject) => {
    axios({
      url: url,
      params: params,
      method: 'get',
      responseType: 'blob'
    }).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  })
}
// 用于获得头部传过来的文件名信息
axios.$downLoad1 = function (url, params) {
  return new Promise((resolve, reject) => {
    axios({
      url: url,
      params: params,
      method: 'get',
      responseType: 'blob'
    }).then(res => {
      resolve(res);
    }).catch(err => {
      reject(err)
    })
  })
}
axios.$delete = function (url, params) {
  return new Promise((resolve, reject) => {
    axios.delete(url, {
      params: params
    }, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
    }).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  })
}
axios.$post = function (url, params, headers_) {
  var headers = headers_ ? {
    'Content-Type': 'application/x-www-form-urlencoded'
  } : headers_;
  return new Promise((resolve, reject) => {
    axios.post(url, QS.stringify(params), {
        headers: headers,
      }).then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
axios.$post1 = function (url, params, headers_) {
  var headers = headers_ ? {
    'Content-Type': 'application/x-www-form-urlencoded'
  } : headers_;
  return new Promise((resolve, reject) => {
    axios.post(url, (params), {
        headers: headers,
      }).then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
axios.$put = (url, params) => {
  var headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
  };
  return new Promise((resolve, reject) => {
    axios.put(url, util.transformFormData(params), {
        headers: headers,
      }).then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
axios.$postExport = function (url, parameter) {
  return axios({
    url: url,
    data: parameter,
    method: 'post',
    responseType: 'blob'
  })

}
export default axios
posted @   残星落影  阅读(149)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
欢迎阅读『封装axios请求』
点击右上角即可分享
微信分享提示