Blame view

src/utils/request.js 2.18 KB
任超 committed
1 2 3
/**
 * 此文件主要创建 axios 实例,然后添加请求拦截器和响应拦截器
 */
4 5 6 7
import axios from "axios";
import { Message } from "element-ui";
import { endLoadingSubCount } from "./requestLoading";
import router from "../router";
任超 committed
8 9 10

// create an axios instance
const service = axios.create({
11 12 13 14 15 16 17
  baseURL: process.env.VUE_APP_BASE_API,
  withCredentials: true, //是否允许跨域
  headers: {
    "Content-Type": "application/json; charset=utf-8",
  },
  timeout: 15000,
});
任超 committed
18 19 20

// request interceptor
service.interceptors.request.use(
21 22 23 24 25 26 27 28 29 30 31
  (config) => {
    //调用登录接口时无token,也不需要传token,其他接口都传入token
    config.headers.Authorization = sessionStorage.getItem("token") || "";
    config.headers.Accept = "application/json";
    return config;
  },
  (error) => {
    Message.error("请求超时!");
    return Promise.reject(error);
  }
);
任超 committed
32 33 34

// response interceptor
service.interceptors.response.use(
35 36 37 38 39 40 41 42
  (response) => {
    /**
     *  对响应数据判断:
     *  如果成功返回数据,就通过return把数据返出去
     *  如果请求不成功,就在拦截器这里统一处理(组件的代码就不用关注错误的情况了)
     */
    if (response.status == 200) {
      return response.data;
任超 committed
43
    } else {
44 45 46 47 48 49
      // 对响应错误做点什么
      Message({
        message: "请求失败",
        type: "error",
        duration: 5 * 1000,
      });
任超 committed
50
    }
51 52 53 54 55 56 57 58 59 60 61 62 63 64
    return response;
  },
  (error) => {
    handleErrorData(error.response.status);
    endLoadingSubCount();
    return Promise.reject(error);
  }
);
//对错误信息的处理函数
function handleErrorData(status) {
  switch (status) {
    case 401:
      Message.error("由于长时间未操作,请重新登录!");
      router.replace({
xiaomiao committed
65
        path: "/login/jg",
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
        query: {
          redirect: router.history.current.fullPath,
        },
      });
      break;
    case 403:
      Message.error("拒绝访问");
      break;
    case 404:
      Message.error("很抱歉,资源未找到!");
      break;
    case 500:
      Message.error("服务器错误!");
      break;
    default:
      Message.error("服务正在联调中,请稍后!");
      break;
  }
任超 committed
84
}
85
export default service;