axios 拦截器封装

// request拦截器
import axios from 'axios'
// import Message from '@/lib/ego-ui/packages/message'
import { Message } from 'element-ui'
// import router from '../router'
// 创建axios实例
const service = axios.create({
  timeout: null // 请求超时时间
})
let serviceTips = '服务器超时'

// request拦截器
service.interceptors.request.use(
  config => {
    // 获取本地token
    let token = localStorage.getItem('tokendata')
    // 设置请求头
    let headers = 'application/json'
    // 是否携带token
    let tokenFlag = true
    // 防止IE浏览器获取到缓存数据
    if (config.url.indexOf('?time') < 1) {
      if (config.url.indexOf('?') < 1) {
        config.url += '?time=' + new Date().getTime()
      } else {
        config.url += '&time=' + new Date().getTime()
      }
    }
    // 是否修改请求信息
    if (config.opts) {
      // 获取携带token状态
      tokenFlag = config.opts ? config.opts.token : true
      // 获取请求头
      // headers = config.opts.Header ? config.opts.Header : 'application/json'
      // 拓展头部参数
      let Head = config.opts.Head

      if (Head) {
        for (let key in Head) {
          config.headers[key] = Head[key]
          if (key === 'Content-Type') {
            headers = Head[key]
          }
        }
      }
    }
    if (token && tokenFlag) {
      // 条件允许,携带token请求
      // config.headers['token'] = token
      config.headers['X-Auth0-Token'] = token
    } else {
      // headers = 'application/x-www-form-urlencoded'
    }
    // 设置请求格式
    config.headers['Content-Type'] = headers
    // config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    return config
  },
  err => {
    return Promise.reject(err)
  }
)

// http response 服务器响应拦截器
service.interceptors.response.use(
  response => {
    if (
      response.data.code === -401 ||
      response.data.code === 3001 ||
      response.data.code === 40001 // 
    ) {
      localStorage.removeItem('tokendata')
      window.location.href = window.location.origin
      // router.replace({
      //   path: '/login'
      // })
    }
    return response
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 400:
          console.log(error.response)
          error.response.data = '资源不存在'
          break
        case 401:
          error.response.data = '登陆超时,重新登陆'
          localStorage.removeItem('tokendata')
          window.location.href = window.location.origin
          // router.replace({
          //   path: '/login',
          //   query: {
          //     // redirect: router.currentRoute.fullPath
          //   } // 登录成功后跳入浏览的当前页面
          // })
          break
        case 404:
          error.response.data = '资源不存在'
          break
        case 406:
          error.response.data = '头部无携带token'
          break
        case 412:
          localStorage.removeItem('tokendata')
          // 拦截错误 并重新跳入登页重新获取token
          window.location.href = window.location.origin
          // router.replace({
          //   path: '/login',
          //   query: {
          //     redirect: router.currentRoute.fullPath
          //   } // 登录成功后跳入浏览的当前页面
          // })
          error.response.data = '秘钥失效'
          localStorage.removeItem('tokendata') // 清除token
          break
        case 415:
          error.response.data = '请求type有误'
          break
        case 500:
          error.response.data = '服务器异常'
          break
      }
      serviceTips = error.response.data
    }
    // Message({
    //   message: serviceTips,
    //   theme: 'danger'
    // })
    Message.error(serviceTips)
    return Promise.reject(serviceTips)
  }
)
export default service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值