axios封装

复制代码
import axios from "axios";
import { Modal, message } from "antd";
import i18next from "i18next";
const { CancelToken } = axios;
const cancelTokenArr = {};

const _axios = axios.create({
  baseURL: "/console/v1",
});

_axios.interceptors.request.use(
  (config) => {
    const token = sessionStorage.getItem("token");
    if (token) {
      config.headers["token"] = token;
    }
    if (config.cancel) {
      config.cancelToken = new CancelToken((c) => {
        cancelTokenArr[config.cancel] = c;
      });
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

_axios.interceptors.response.use(
  (response) => {
    const res = response.data;
    if (res instanceof Blob) {
      return response;
    } else if ( res.code == "000401") {
      sessionStorage.removeItem("token");
      message.destroy();
      Modal.destroyAll();
      Modal.warning({
        title: "登录过期",
        content: "登录状态失效,请重新登录",
        onOk() {
          location.href = "";
        },
      });
    } else if (res.code !== "000000") {
      message.error(res?.message);
    } else {
      return res;
    }
  },
  (error) => {
    const res = error.response;
    if (res?.status && (res?.status === 403 || res?.status === 401)) {
       return {
         status: "000403",
         message: "验签不通过!请重新登录",
       };
    } else {
      message.error(res?.data?.error_msg );
      return Promise.reject(res?.data);
    }
  }
);

_axios.cancelAjax = (name, msg) => {
  if (cancelTokenArr[name]) {
    cancelTokenArr[name](msg || "强制中断了请求");
    cancelTokenArr[name] = null;
  }
};

export default _axios;
复制代码

 

posted @   Janni  阅读(479)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2021-06-02 兼容性测试工具
点击右上角即可分享
微信分享提示