mock 地址以及启动地址配置

返回信息错误提示码处理

/** @format */

import axios from 'axios';
import Vue from 'vue';
import store from '@/store';
// import { CONSOLE_REQUEST_ENABLE, CONSOLE_RESPONSE_ENABLE } from '../index';

const CancelToken = axios.CancelToken;
let CancelPromise = {};

/**
 * 请求成功拦截器
 * @param req 请求参数
 * @returns {*}
 */
export function requestSuccessFunc(req) {
  if (CancelPromise[req.url]) {
    CancelPromise[req.url]();
  }

  req.cancelToken = new CancelToken(c => {
    CancelPromise[req.url] = c;
  });

  // CONSOLE_REQUEST_ENABLE &&
  // console.info('requestInterceptorFunc', `url:${req.url}`, req);
  // 自定义请求拦截逻辑,处理权限,请求发送监控等
  return req;
}

/**
 * 请求失败拦截器
 * @param reqError 失败信息
 * @returns {Promise.<*>}
 */
export function requestFailFunc(reqError) {
  // 自定义请求失败逻辑,处理断网,请求发送监控等
  return Promise.reject(reqError);
}

/**
 * 响应成功拦截器
 * @param res 返回数据
 * @returns {*}
 */
export function responseSuccessFunc(response) {
  // 自定义响应成功逻辑,全局拦截接口,根据不同业务做不同处理,响应成功监控等
  // CONSOLE_RESPONSE_ENABLE && console.info('responseInterceptorFunc', response);

  if (response && response.data.code === 401) {
    // router.replace({ name: 'login' });
    store.dispatch('user/ACTIONS_LOGOUT');
  } else if (response && response.data.code === 0) {
    return (response.data && response.data.data) || response.data.msg;
  } else if (response && (response.data.token || response.data.contextId)) {
    return response.data;
  } else {
    // 异常处理
    Vue.prototype.$toast(response.data.msg);
    // Vue.prototype.$toast.fail(response.data.msg);
    // console.log('warning', response.data.msg || response.data.message);
    return Promise.reject(response && response.data);
  }
}

/**
 * 响应失败拦截器
 * @param resError 失败信息
 * @returns {Promise.<*>}
 */
export function responseFailFunc(resError) {
  let errData = {};
  if (resError.toString() === 'Cancel') {
    errData = { isCancel: true };
    return Promise.reject(errData);
  }
  // 响应失败且不是取消请求,可根据resError信息做监控处理
  console.info('响应失败', resError);
  switch (resError.response.status) {
    case 500:
      console.log('接口错误!!!接口地址:' + resError.response.config.url);
      errData = {
        msg: '接口错误!!!接口地址:' + resError.response.config.url
      };
      break;
    case 400:
      // 接口400错误码时弹出返回错误信息
      Vue.prototype.$toast.fail({
        message: '错误码400:' + resError.response.data.msg
      });
      errData = {
        data: resError.response.data.data
      };
      break;
    case 404:
      sessionStorage.clear();
      store.commit('user/STORE_PARAMS', {});
      break;
    case 403:
    case 502:
      // 接口403错误码时返回登录页面
      // router.replace({ name: 'login' });
      store.dispatch('user/ACTIONS_LOGOUT');
      errData = {
        data: resError.response.data.data
      };
      break;
    default:
      Vue.prototype.$toast.fail({
        message: '未知错误,请联系管理员,错误码:' + resError.response.status
      });
      errData = {
        data: resError.response.data.data
      };
      break;
  }
  return Promise.reject(errData);
}

猜你喜欢

转载自www.cnblogs.com/kittyjingjing/p/13385292.html