axios拦截器

147 阅读1分钟
import axios from 'axios'

import { Message } from 'element-ui'

import store from '@/store'

import { getTokenTime } from '@/utils/auth'

import router from '@/router'

const timeout = 3600

console.log(process.env)

// 创建axios实例

const service = axios.create({

  baseURL: process.env.VUE_APP_BASE_API

})

\


// 请求拦截器

service.interceptors.request.use(config => {

  // 请求配置信息

  const token = store.getters.token

  if (token) {

    // 检查token是否过期

    if (isCheckTimeOUt()) {

      store.commit('user/logout')

      router.push('/login')

      return Promise.reject(new Error('登录过期'))

    }

    config.headers.Authorization = 'Bearer ' + token

  }

  return config

})

\


// 响应拦截器

service.interceptors.response.use(res => {

  const { success, data, message } = res.data

  if (success) {

    return data

  }

  Message.error(message)

  // 什么都没做 默认就会进入成功

  return Promise.reject(new Error('接口异常'))

}, err => {

  // 响应错误

  console.dir(err)

  let text = null

  if (err.response && err.response.data && err.response.data.code === 10002) {

    // 当等于10002的时候 表示 后端告诉我token超时了

    store.dispatch('user/logout') // 登出action 删除token

    router.push('/login')

    text = '登录过期'

  }

  if (err.response && err.response.status === 404) {

    text = '亲,资源不存在'

  }

  Message.error(text || err.message)

  // 什么都没做 默认就会进入成功

  // return Promise.reject不在进入下一个then进去catch

  return Promise.reject(new Error(err))

}

)

function isCheckTimeOUt() {

  const currentTime = Date.now()

  const tokenTime = getTokenTime()

  return ((currentTime - tokenTime) / 1000) > timeout

}

export default service