LaiToolManagementSystem/src/requestErrorConfig.ts
lq1405 79479bfdc5 V1.0.9
修改请求重试,修改所有的request方法
添加部分权限控制
完善软件授权码设置
2025-05-16 17:51:58 +08:00

97 lines
2.7 KiB
TypeScript

import type { RequestOptions } from '@@/plugin-request/request';
import { RequestConfig } from '@umijs/max';
import { message } from 'antd';
import { history } from 'umi';
// 错误处理方案: 错误类型
enum ErrorShowType {
SILENT = 0,
WARN_MESSAGE = 1,
ERROR_MESSAGE = 2,
NOTIFICATION = 3,
REDIRECT = 9,
}
// 与后端约定的响应数据格式
interface ResponseStructure {
code: number;
data: any;
message?: string;
}
/**
* @name 错误处理
* pro 自带的错误处理, 可以在这里做自己的改动
* @doc https://umijs.org/docs/max/request#配置
*/
export const errorConfig: RequestConfig = {
// 错误处理: umi@3 的错误处理方案。
errorConfig: {
// 错误抛出
errorThrower: (res) => {
const { code, data, message } =
res as unknown as ResponseStructure;
if (code != 1) {
const error: any = new Error(message);
error.name = 'BizError';
error.info = { message };
throw error; // 抛出自制的错误
}
},
// 错误接收及处理
errorHandler: async (error: any, opts: any) => {
debugger
let url = error.config.url;
if (opts?.skipErrorHandler) throw error;
// 我们的 errorThrower 抛出的错误。
if (error.name === 'BizError') {
} else if (error.response) {
// 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
} else if (error.request) {
// 请求已经成功发起,但没有收到响应
// \`error.request\` 在浏览器中是 XMLHttpRequest 的实例,
// 而在node.js中是 http.ClientRequest 的实例
message.error('None response! Please retry.');
} else {
// 发送请求时出了点问题
message.error('Request error, please retry.');
}
},
},
// 请求拦截器
requestInterceptors: [
(config: RequestOptions) => {
// 拦截请求配置,进行个性化处理。
// 添加校验头
// config.baseURL = 'https://localhost:44362';
config.baseURL = window.location.origin.includes('localhost') ? 'https://localhost:44362' : window.location.origin;
const headers = {
...config.headers, // 保留已有的请求头
'Authorization': `Bearer ${localStorage.getItem('token')}`, // 添加新的请求头
// 你可以根据需要添加更多的请求头
};
return { ...config, headers };
},
],
// 响应拦截器
responseInterceptors: [
(response) => {
// 拦截响应数据,进行个性化处理
const { data } = response as unknown as ResponseStructure;
if (data?.success === false) {
message.error('请求失败!');
}
return response;
},
],
};