, ,

umi封装request

Umi4 中 umi-request 不再内置,需要手动安装依赖。 解决步骤 1. 安装 umi-reques…

Umi4 中 umi-request 不再内置,需要手动安装依赖。

解决步骤

1. 安装 umi-request

pnpm add umi-request
# npm
npm install umi-request
import { extend } from 'umi-request';
import { message } from 'antd';
import { history } from 'umi';

const request = extend({
  prefix: '/react_oa_api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  },
});

request.interceptors.request.use((url, options) => {
  const token = sessionStorage.getItem('token');
  if (token) {
    options.headers = {
      ...options.headers,
      Authorization: token,
    };
  }
  return {
    url,
    options,
  };
});

request.interceptors.response.use(async (response, options) => {
  const data = await response.clone().json();
  
  if (data.code !== 0) {
    message.error(data.msg || '请求失败');
    history.replace('/users/login');
    sessionStorage.clear();
    throw new Error(data.msg || '请求失败');
  }
  
  const token = response.headers.get('Authorization');
  if (token) {
    sessionStorage.setItem('token', token);
  }
  
  return data;
}, (error) => {
  if (error.response) {
    message.error(`网络错误 ${error.response.status}`);
  } else if (error.request) {
    message.error('网络请求失败');
  } else {
    message.error(`请求配置错误: ${error.message}`);
  }
  
  return {
    code: -1,
    data: false,
    msg: error.message || '网络请求失败',
  };
});

const Http = {
  post(url, params = {}, options = {}) {
    return request.post(url, {
      data: params,
      ...options,
    });
  },

  put(url, params = {}, options = {}) {
    return request.put(url, {
      data: params,
      ...options,
    });
  },

  get(url, params = {}, options = {}) {
    return request.get(url, {
      params,
      ...options,
    });
  },

  delete(url, params = {}, options = {}) {
    return request.delete(url, {
      params,
      ...options,
    });
  },
};

export default Http;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor