axios封装

2020-05-19  本文已影响0人  chan_it
import axios from 'axios'
import router from '../router'
import store from '../store'

import { Indicator, Toast } from 'mint-ui'

const isDev = process.env.NODE_ENV === 'development'
const $http = axios.create({
  baseURL: isDev ? 'http://192.168.10.10/' : 'http://103.47.82.43/',
  timeout: 1000 * 10
})

$http.interceptors.request.use(
  config => {
    let token = localStorage.getItem('accessToken') ? localStorage.getItem('accessToken') : store.state.token
    if (token) {
      Object.assign(config.headers, { 'Authorization': token })
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

$http.interceptors.response.use(
  response => {
    if (response.status === 200 && response.data.statu !== 200) {
      errorHandle(response.data.statu, response.data.data)
    }
    return response
  },
  error => {
    const { response } = error
    if (error.toString() === 'Error: timeout of 10000ms exceeded') {
      tip('服务器响应超时')
    }
    if (error.toString() === 'Error: Network Error' && window.navigator.onLine) {
      tip('服务器无响应')
    }
    if (error.toString() === 'Error: Request failed with status code 500') {
      tip('服务器繁忙,请稍后重试!')
    }
    if (response) {
      errorHandle(response.status, response.data.error)
      return Promise.reject(response)
    } else {
      if (!window.navigator.onLine) {
        tip('无网络连接,请稍后重试!')
      }
    }
    return Promise.reject(error)
  }
)

const tip = msg => {
  Indicator.close()
  Toast({
    message: msg,
    forbidClick: true,
    className: 'addClassToast'
  })
}

const toLogin = () => {
  router.replace({
    path: '/login',
    query: {
      redirect: '/login'
    }
  })
}

const errorHandle = (code, other) => {
  switch (code) {
    case 201:
      break
    // 401: 未登录状态
    case 401:
      toLogin()
      break
    // 403: 登录过期
    case 403:
      // tip('登录过期,请重新登录')
      localStorage.removeItem('ylbAppAuthorization')
      store.commit('ylbAppLoginStatus', null)
      setTimeout(() => {
        toLogin()
      }, 500)
      break
    // 404请求不存在
    case 404:
      tip('请求的资源不存在')
      break
    // 503,服务器没启动
    case 503:
      tip('服务器不可用')
      break
    default:
      console.log(code, other)
  }
}

export default $http
上一篇下一篇

猜你喜欢

热点阅读