axios封装

110 阅读1分钟
import axios from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_URL, 
  timeout: 600000, // request timeout
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  transformResponse: [
    function (data: any) {
      try {
        data = JSON.parse(data)
        return data
      } catch (e) {
        return data
      }
    }
  ],
  transformRequest: [
    (data: any, headers: any): string => {
      headers.common.Authorization = localStorage.getItem('token')
      if (headers['Content-Type'] === 'multipart/form-data') {
        return data
      }
      return JSON.stringify(data)
    }
  ]
})

service.interceptors.request.use(
  (config) => {
    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)

service.interceptors.response.use(
  (response) => {
    const data = response.data
    if (data.code === 200) {
      return data
    } else if (data.code === 1010005 || data.code === 523) {
      const route = router.currentRoute.value
      if (!route.path.includes('/login')) {
        // token过期
        window.localStorage.clear()
        window.sessionStorage.clear()
        // 执行login
      }

      return Promise.reject(data)
    } else {
      ElMessage({
        type: 'error',
        message: data.msg || data.message || data,
        duration: 3000
      })
      return Promise.reject(data)
    }
  },
  (error) => {
    ElMessage({
      type: 'error',
      message: error.message || error.msg,
      duration: 3000
    })
    return Promise.reject(error)
  }
)
export default service