fix(request): 401 可读 JSON 的 msg 附加到 error.message
- 后端 401 均返回 {code, msg} 可读 JSON(如 Mail/Login 的"邮箱或密码错误"),
拦截器此前在 silent 场景原样 reject,调用方只看到 HTTP 状态文本
- 现在统一提取响应体 msg 覆盖到 error.message,silent 与普通调用都能拿到后端文案
This commit is contained in:
1 parent
4f4508083c
commit
716cddb9e8
1 file changed
+12
-2
+12
-2
@@ -88,7 +88,17 @@ request.interceptors.response.use(
|
|||||||
(error) => {
|
(error) => {
|
||||||
const status = error?.response?.status
|
const status = error?.response?.status
|
||||||
const url: string = error?.config?.url || ''
|
const url: string = error?.config?.url || ''
|
||||||
// 静默模式:调用方自行处理失败(如登录页会话恢复),不弹全局提示
|
// 后端可读业务 JSON({code, msg}):提取 msg 附加到 error.message,
|
||||||
|
// 保证 silent 调用方与各处 catch 的 (e as Error).message 都能拿到友好文案
|
||||||
|
// (如 Mail/Login 401 返回 {"code":1,"msg":"邮箱或密码错误"},
|
||||||
|
// 而不是 axios 默认的 "Request failed with status code 401")
|
||||||
|
const bizData = error?.response?.data as { code?: number; msg?: string } | undefined
|
||||||
|
const bizMsg =
|
||||||
|
bizData && typeof bizData === 'object' && typeof bizData.msg === 'string' && bizData.msg
|
||||||
|
? bizData.msg
|
||||||
|
: ''
|
||||||
|
if (bizMsg) error.message = bizMsg
|
||||||
|
// 静默模式:调用方自行处理失败(如登录页会话恢复、邮箱登录/JMAP),不弹全局提示
|
||||||
const silent = (error?.config as InternalAxiosRequestConfig | undefined)?.silent === true
|
const silent = (error?.config as InternalAxiosRequestConfig | undefined)?.silent === true
|
||||||
if (silent) {
|
if (silent) {
|
||||||
return Promise.reject(error)
|
return Promise.reject(error)
|
||||||
@@ -99,7 +109,7 @@ request.interceptors.response.use(
|
|||||||
if (status === CODE_UNAUTHORIZED && !isLoginRequest) {
|
if (status === CODE_UNAUTHORIZED && !isLoginRequest) {
|
||||||
handleLoginExpired()
|
handleLoginExpired()
|
||||||
} else {
|
} else {
|
||||||
const msg = error?.response?.data?.msg || error?.message || '网络错误'
|
const msg = bizMsg || error?.message || '网络错误'
|
||||||
ElMessage.error(msg)
|
ElMessage.error(msg)
|
||||||
}
|
}
|
||||||
return Promise.reject(error)
|
return Promise.reject(error)
|
||||||
|
|||||||
Reference in new issue
Block a user