diff --git a/src/utils/request.ts b/src/utils/request.ts index e386511..3a17a8d 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -6,6 +6,9 @@ const DEFAULT_TIMEOUT = 10000; const activeControllers = new Set(); +const getResponseErrorMsg = (data: any, fallback = '请求失败') => + data?.data?.msg || data?.msg || data?.message || fallback; + /** 统一处理 401 未授权逻辑 */ const handleUnauthorized = (msg?: string) => { auth.logout(); @@ -74,20 +77,24 @@ const request = ( activeControllers.delete(controller); if (res.status === 401) { - handleUnauthorized(); - return Promise.reject(new Error('Unauthorized')); + const errorData = await res.json().catch(() => ({})); + const errorMsg = getResponseErrorMsg(errorData, '登录状态已过期,请重新登录'); + handleUnauthorized(errorMsg); + return Promise.reject(new Error(errorMsg)); } if (res.status === 500) { - message.error('服务器开小差了,请稍后再试'); const errorData = await res.json().catch(() => ({})); - return Promise.reject(new Error(errorData.message || '服务器内部错误')); + const errorMsg = getResponseErrorMsg(errorData, '服务器开小差了,请稍后再试'); + message.error(errorMsg); + return Promise.reject(new Error(errorMsg)); } if (!res.ok) { const errorData = await res.json().catch(() => ({})); - message.error(errorData.message || '请求失败'); - return Promise.reject(new Error(errorData.message || '请求失败')); + const errorMsg = getResponseErrorMsg(errorData); + message.error(errorMsg); + return Promise.reject(new Error(errorMsg)); } if (options.responseType === 'blob') { @@ -97,8 +104,15 @@ const request = ( const data = await res.json(); if (data.code == 401) { - handleUnauthorized(data.msg); - return Promise.reject(new Error(data.msg || 'Unauthorized')); + const errorMsg = getResponseErrorMsg(data, '登录状态已过期,请重新登录'); + handleUnauthorized(errorMsg); + return Promise.reject(new Error(errorMsg)); + } + + if (data.code && data.code !== 200) { + const errorMsg = getResponseErrorMsg(data); + message.error(errorMsg); + return Promise.reject(new Error(errorMsg)); } return data;