request.js 1.69 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
import axios from 'axios'
import {
  CONFIG
} from './const.js'
import {
  userLogout
} from './util.js'
import {
  Message
} from 'element-ui'
import router from '../router'

// 封装接口请求,如果不是正常返回,均会用reject处理,并且会默认抛出message提示,如果需要自定义,可以在不同接口配置响应拦截器
const service = axios.create({
  baseURL: CONFIG.API_URL,
})

service.interceptors.request.use(
  config => {
    // 添加token
    const token = localStorage.getItem('electric_user_token');
    if (!config.noToken && token) config.headers['Authorization'] = token;
    return config
  },
  error => {
    console.log('request error:', error)
    return Promise.reject(error)
  }
)

service.interceptors.response.use(
  response => {
    // 如果设置了拦截器,执行,否则执行默认拦截器
    if (response.config.responseInterceptor) {
      return response.config.responseInterceptor(response);
    } else {
      const res = response.data
      // 后台返回的数据如果不是200,也抛出reject
      if (res.code !== 200) {
        Message({
          message: res.msg || 'Error',
          type: 'error',
        })
        return Promise.reject(new Error(res.msg || 'Error'))
      } else {
        return res.data
      }
    }
  },
  error => {
    console.log('response error:' + error)
    if (error && error.response) {
      // 处理响应状态
      switch (error.response.status) {
        case 401:
        	userLogout();
        	break
        default:
          Message({
            message: error.message,
            type: 'error',
          })
          break
      }
    }
    return Promise.reject(error)
  }
)

export default service