axios拦截器

127 阅读1分钟

应用场景:

1:每个请求都带上的参数,比如token,时间戳等。

2:对返回的状态进行判断,比如token是否过期、访问资源是否存在等

import axios from 'axios'
// 引入全局状态管理---主要用于获取登录状态,如果没有使用vuex,则通过本地存储获取
import store from '@/store/store.js'

// 创建 axios 实例,一般在项目中会在要给单独的JS中模块中创建配置
let request = axios.create({
  timeout: 5000, // 设置请求的超时时间
  baseURL: 'xxxx' // 请求的根路径
})

// 配置请求拦截器
request.interceptors.request.use(config => {
  // 判断是否登录----使用vuex
  if (store.state.token) {
    // 配置请求头---请求头添加token字段
    config.headers.Authorization = store.state.token
  }
  /* 没有使用vuex,从本地存储中获取
   if (window.localStrong.getItem('token')) {
    config.headers.Authorization = window.localStrong.getItem('token')
  }
  */
  return config
})

// 配置响应拦截器
request.interceptors.response.use(
  // 响应成功
  res => {
    return res
  },
  // 失败
  err => {
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          // 请求出错
          break
        case 401:
          // 授权失败
          break
        case 403:
          // 拒绝访问
          break
        case 404:
          // 请求错误,资源不存在
          break
        case 500:
          // 服务器端错误
          break
        default:
          // 其它错误
      }
    } 
    return Promise.reject(err.response)
  }
)