新增错误消息防抖机制,优化错误提示显示并清理冗余代码
This commit is contained in:
@@ -6,6 +6,22 @@ import qs from 'qs';
|
||||
// 标记是否正在处理 token 过期,避免重复弹窗
|
||||
let isHandlingTokenExpired = false;
|
||||
|
||||
// 错误消息防抖:防止短时间内显示多个错误消息
|
||||
let lastErrorTime = 0;
|
||||
const ERROR_MESSAGE_INTERVAL = 2000; // 2秒内只显示一个错误
|
||||
|
||||
const showErrorMessage = (message: string) => {
|
||||
const now = Date.now();
|
||||
|
||||
// 2秒内只显示一个错误消息(不管内容是否相同)
|
||||
if (now - lastErrorTime < ERROR_MESSAGE_INTERVAL) {
|
||||
return; // 跳过
|
||||
}
|
||||
|
||||
lastErrorTime = now;
|
||||
ElMessage.error(message);
|
||||
};
|
||||
|
||||
// 配置新建第一个 axios 实例(原来的主服务)
|
||||
const service: AxiosInstance = axios.create({
|
||||
baseURL: import.meta.env.VITE_API_URL,
|
||||
@@ -20,9 +36,6 @@ const service: AxiosInstance = axios.create({
|
||||
|
||||
// 配置新建第二个 axios 实例(新功能服务)
|
||||
const newService: AxiosInstance = axios.create({
|
||||
// baseURL: 'http://192.168.3.95:8000/',
|
||||
// baseURL: 'http://192.168.3.49:8000/',
|
||||
// baseURL: 'http://localhost:8000/',
|
||||
baseURL: 'http://192.168.3.200:8000/',
|
||||
// baseURL: 'http://192.168.3.11:8000/',
|
||||
timeout: 50000,
|
||||
@@ -118,7 +131,7 @@ const responseInterceptor = (response: AxiosResponse) => {
|
||||
// 业务逻辑错误处理
|
||||
if (code !== undefined && code !== 0 && code !== 200) {
|
||||
const errorMsg = message || `请求失败(${code})`;
|
||||
ElMessage.error(errorMsg);
|
||||
showErrorMessage(errorMsg);
|
||||
return Promise.reject(new Error(errorMsg));
|
||||
}
|
||||
|
||||
@@ -130,7 +143,7 @@ const responseErrorHandler = (error: any) => {
|
||||
console.error('API请求错误:', error);
|
||||
|
||||
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
|
||||
ElMessage.error('请求超时,请检查网络连接');
|
||||
showErrorMessage('请求超时,请检查网络连接');
|
||||
return Promise.reject(new Error('请求超时'));
|
||||
}
|
||||
|
||||
@@ -144,7 +157,8 @@ const responseErrorHandler = (error: any) => {
|
||||
}
|
||||
|
||||
const httpStatus = error.response.status;
|
||||
const message = error.response.data?.message || error.response.statusText;
|
||||
// 优先使用返回数据中的 message 字段
|
||||
const responseMessage = error.response.data?.message;
|
||||
|
||||
// 处理 HTTP 错误状态
|
||||
switch (httpStatus) {
|
||||
@@ -152,23 +166,23 @@ const responseErrorHandler = (error: any) => {
|
||||
handleTokenExpired();
|
||||
break;
|
||||
case 403:
|
||||
ElMessage.error('没有权限访问该资源');
|
||||
showErrorMessage(responseMessage || '没有权限访问该资源');
|
||||
break;
|
||||
case 404:
|
||||
ElMessage.error('请求的资源不存在');
|
||||
showErrorMessage(responseMessage || '请求的资源不存在');
|
||||
break;
|
||||
case 500:
|
||||
ElMessage.error('服务器内部错误');
|
||||
showErrorMessage(responseMessage || '服务器内部错误');
|
||||
break;
|
||||
case 502:
|
||||
ElMessage.error('网关错误');
|
||||
showErrorMessage(responseMessage || '网关错误');
|
||||
break;
|
||||
case 503:
|
||||
ElMessage.error('服务不可用');
|
||||
showErrorMessage(responseMessage || '服务不可用');
|
||||
break;
|
||||
default:
|
||||
if (httpStatus >= 400) {
|
||||
ElMessage.error(message || `请求失败(${httpStatus})`);
|
||||
showErrorMessage(responseMessage || `请求失败(${httpStatus})`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,4 +198,4 @@ newService.interceptors.response.use(responseInterceptor, responseErrorHandler);
|
||||
|
||||
// 导出
|
||||
export default service;
|
||||
export { newService };
|
||||
export { newService, showErrorMessage };
|
||||
|
||||
Reference in New Issue
Block a user