axios 自定义封装组件

import axios, {
  AxiosInstance,
  AxiosError,
  AxiosResponse,
  AxiosRequestConfig,
} from "axios";
import { Toast } from "vant";
// import { Loading } from "element-ui";
// isReturnNativeData?: boolean  // 返回原始数据
//     errorMode?: string       // 错误提示显示方式
//     repeatRequest?: boolean // 允许重复请求
// loading?: boolea           //  是否展示loading
import { errorHandler, errorMsgHandler } from "./errorHandler";
import { RandomHelper } from "./untils/untils";

let pendingMap = new Map();
let requestCount = 0;
let loadingInstance;
let options = { fullscreen: true };
const showLoading = () => {
  // requestCount++;
  // if (requestCount === 1) {
  //   loadingInstance = Loading.service(options);
  // }
};
const closeLoading = () => {
  // requestCount--;
  // if (requestCount === 0) loadingInstance.close();
};

function getRequestKey(config) {
  return (
    (config.method || "") + config.url + "?" + JSON.stringify(config?.data)
  );
}

function setPendingMap(config) {
  const controller = new AbortController();
  config.signal = controller.signal;
  const key = getRequestKey(config);
  if (pendingMap.has(key)) {
    pendingMap.get(key).abort();
    pendingMap.delete(key);
  } else {
    pendingMap.set(key, controller);
  }
}

const service = axios.create({
  timeout: 1000 * 30,
  baseURL: "",
  withCredentials: true,
  headers: {
    "Content-Type": "application/json;charset=utf-8",
  },
});

service.interceptors.request.use(
  (config) => {
    let now = +new Date();
    // console.log(config, "request");

    var randomHelper = new RandomHelper();
    var randomUUID = randomHelper.randomUUID();

    config.headers["X-Request-Id"] = randomUUID;
    config.headers["CurrentTime"] = now;
    config.headers["Sign"] = "1234567890";

    if (config.loading) showLoading();
    if (!config.repeatRequest) {
      setPendingMap(config);
    }
    return config;
  },
  (error) => {
    // console.log(error);
    return Promise.reject();
  }
);

service.interceptors.response.use((response) => {
  const config = response.config;

  if (config.loading) closeLoading();
  const key = getRequestKey(config);
  if (pendingMap.has(key)) {
    pendingMap.delete(key);
  }
  // console.log(response, "response");
  if (response.status === 200) {
    if (config?.isReturnNativeData) {
      return response.data;
    } else {
      const { data, success, status } = response.data;

      if (status.code === 0) {
        // console.log(data, "data444545");
        return data;
      } else {
        errorHandler(
          status.err || status.msg || errorMsgHandler(code),
          config.errorMode
        );
        Promise.reject();
      }
    }
  } else {
    const errMsg = errorMsgHandler(response.status);
    errorHandler(errMsg, config.errorMode);
    Promise.reject();
  }
});

// 错误处理
service.interceptors.response.use(undefined, (e) => {
  Toast({
    message: "error",
  });
  // errorHandler(e?.response?.status);
});

export default service;
import axios from "@/request/axios";
import { returnBaseUrl } from "@/request/untils/untils";

const baseURL = returnBaseUrl("/secure");
const baseURL2 = returnBaseUrl("/api");
const baseURL3 = returnBaseUrl("/admin");
// 获取email otp
export const getOTP = function (data) {
  return axios({
    baseURL,
    method: "post",
    url: "/auth/sendEmailOTP",
    data,
  });
};
// // 获取短信 otp
export const getPhoneOTP = function (data) {
  return axios({
    baseURL,
    method: "post",
    url: "/auth/sendOTP",
    data,
  });
};
//登录注册
export const signIn = function (data) {
  return axios({
    baseURL,
    method: "post",
    url: "/auth/verifyEmailOTP",
    data,
    loading: true,
  });
};

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值