axios.js 2.57 KB
import axios from "axios"
import Cookies from "js-cookie"
import NProgress from "nprogress"
import { Message } from "element-ui"
import router from "@/router/index"
import store from "@/store"
import conf from "../config/index"; // 路径配置
// axios默认配置
const service = axios.create({
  baseURL: conf.baseURL, // api的base_url
  timeout: 600000000000000, // 请求超时时间
  withCredentials: true,
});
// http request 拦截器
service.interceptors.request.use(config => {
  NProgress.start()
  config.headers["Content-Type"] = "application/json;charset=UTF-8"

  const source = axios.CancelToken.source();
  store.commit('setTokenSources', [source.token, source.cancel])
  config.cancelToken = source.token;
  // if (Cookies.get("access_token")) {
  //   config.headers.Authorization = "Bearer" + Cookies.get("access_token")
  // }
  return config
},
  error => {
    return Promise.reject(error.response)
  })

// http response 拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    NProgress.done()
    if (response.config.cancelToken) {
      store.commit('delTokenSources', response.config.cancelToken)
    }
    if (response.status == 200) {
      Cookies.set("access_token", response.data.message, { expires: 1 / 12 })
      // console.log(response.status)
      if (res.code == 999) {
        if (!location.href.includes('localhost')) {
          if (res.data) {
            window.location.href = res.data
          } else {
            router.push({ path: '/login' })
            if (res.message.includes('不存在')) {
              Message({
                message: res.message,
                type: 'error',
                duration: 3 * 1000
              })
            }
          }
        }
        return
      } else {
        Cookies.set("access_token", response.data.message, { expires: 1 / 12 })
      }
    }
    return Promise.resolve(response)
  },
  error => {
    Message({
      message: error.message,
      type: 'error',
      duration: 3 * 1000
    })
    if (error.response == undefined) {
      return Promise.reject(error);
    }
    Message.closeAll()
    const {
      status
    } = error.response
    if (status === 403 || status === 401) {
      Message({
        message: "未登录或登录超时,即将跳转到登录页面",
        type: 'error',
        duration: 3 * 1000
      })
      router.push({
        path: '/login',
        query: {
          url: window.location.href
        }
      })
      return
    }
    return Promise.reject(error.response) // 返回接口返回的错误信息
  })
export default service