给axios进行全局统一返回的定义

129 阅读1分钟

request.ts

import axios from 'axios';

// 创建请求实例
const instance = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  timeout: 300000, // 指定请求超时的毫秒数
  withCredentials: false, // 表示跨域请求时是否需要使用凭证
});

// 前置拦截器(发起请求之前的拦截)
instance.interceptors.request.use(
  (config) => {
    // const token = getToken()
    // if (token) {
    //  config.headers.token = token
    // }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 后置拦截器(获取到响应时的拦截)
instance.interceptors.response.use(
  (response) => {
    // 根据你的项目实际情况来对 response 和 error 做处理
    // 这里对 response 和 error 不做任何处理,直接返回
    return response;
  },
  (error) => {
    const { response } = error;
    if (response && response.data) {
      return Promise.reject(error);
    }
    const { message } = error;
    console.error(message);
    return Promise.reject(error);
  }
);

/**
 * post请求
 *
 * @param {string} url
 * @param {object} data
 * @param {object} params
 */
export const post = (url: string, data = {}, params = {}) => {
  return instance({
    method: 'post',
    url,
    data,
    params,
  });
};

/**
 * get请求
 *
 * @param {string} url
 * @param {object} params
 */
export const get = (url: string, params = {}) => {
  return instance({
    method: 'get',
    url,
    params,
  });
};

/**
 * put请求
 *
 * @param {string} url
 * @param {object} data
 * @param {object} params
 */
export const put = (url: string, data = {}, params = {}) => {
  return instance({
    method: 'put',
    url,
    params,
    data,
  });
};

/**
 * delete请求
 *
 * @param {string} url
 * @param {object} params
 */
export const _delete = (url: string, params = {}) => {
  return instance({
    method: 'delete',
    url,
    params,
  });
};

export default instance;

user.ts

import { post } from '~/common/request';
import { HttpResult } from './../types/global.d';
import { loginVO } from '~/types/user';

export default class User {
  static async login(data = {}): Promise<HttpResult<loginVO>> {
    const res = await post('/user/login', data);
    return res.data;
  }
}

global.d.ts

export interface HttpResult<T> {
  code: number;
  message: string;
  data: T;
  exception: string;
}

user.d.ts

export interface loginVO {
  userId: string;
  username: string;
  token: string;
  expireTime: string;
}