vue3+axios封装


import axios, { AxiosResponse, AxiosRequestConfig } from 'axios'
import { ElLoading } from "element-plus";
import { errorMsg } from '@/utils/msg'
import router from '@/router/index'
let win: any = window
let loadingCount = 0;
const startLoading = () => {
  const loading = ElLoading.service({
    lock: true,
    text: '加载中……',
    background: 'rgba(0, 0, 0, 0.7)',
  })
  setTimeout(() => {
    loading.close()
  }, 2000)
}

const endLoading = () => {
  ElLoading.service().close();
};
export const showLoading = () => {
  if (loadingCount === 0) {
    startLoading();
  }
  loadingCount += 1;
};

export const hideLoading = () => {
  if (loadingCount <= 0) {
    return;
  }
  loadingCount -= 1;
  if (loadingCount === 0) {
    endLoading();
  }
};
const request = axios.create({
  baseURL: win.configs.HOST_URL,
  timeout: 60 * 1000,
})
//请求拦截器
request.interceptors.request.use((config: AxiosRequestConfig) => {
  showLoading();
  if (config.headers) {
    config.headers.Authorization = localStorage.getItem('token') || ''
  }
  return config
}, (error: any) => {
  hideLoading();
  return Promise.reject(error)
})
//响应拦截器
request.interceptors.response.use((response: AxiosResponse) => {
  hideLoading();
  switch (response.data.code) {
    case 10001:
      errorMsg(response.data.msg)
      router.push({ path: '/login' })
      break;
    case 200:
      break;
    default:
      errorMsg(response.data.msg)
  }
  return response.data
}, (error: any) => {
  hideLoading();
  if (error && error.response) {
    // 1.公共错误处理
    // 2.根据响应码具体处理
    switch (error.response.status) {
      case 400:
        error.message = '错误请求'
        break;
      case 401:
        error.message = '未授权,请重新登录'
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误,未找到该资源'
        window.location.href = "/NotFound"
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 501:
        error.message = '网络未实现'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `连接错误`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
      errorMsg('服务器响应超时,请刷新当前页')
    } 
      error.message = '连接服务器失败'
  }

  errorMsg(error.message)
  return Promise.reject(error)
})
export default request

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值