From 33bd4dd1f0e41131cd8e5bbf87204a1f0b72bb08 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 11 四月 2026 07:45:59 +0800
Subject: [PATCH] #页面优化
---
rsf-design/src/utils/http/index.js | 69 +++++++++++++++++++++++++++++++---
1 files changed, 62 insertions(+), 7 deletions(-)
diff --git a/rsf-design/src/utils/http/index.js b/rsf-design/src/utils/http/index.js
index 64720ae..129210c 100644
--- a/rsf-design/src/utils/http/index.js
+++ b/rsf-design/src/utils/http/index.js
@@ -1,7 +1,7 @@
import axios from 'axios'
import { useUserStore } from '@/store/modules/user'
import { ApiStatus } from './status'
-import { HttpError, handleError, showError, showSuccess } from './error'
+import { HttpError, handleError, resolveRequestUrl, showError, showSuccess } from './error'
import { $t } from '@/locales'
const REQUEST_TIMEOUT = 30e3
const LOGOUT_DELAY = 500
@@ -51,21 +51,40 @@
)
axiosInstance.interceptors.response.use(
(response) => {
+ if (!isStandardResponse(response.data)) {
+ throw createInvalidResponseError(response)
+ }
const { code, msg } = response.data
if (code === ApiStatus.success) return response
- if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg)
- throw createHttpError(msg || $t('httpMsg.requestFailed'), code)
+ if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg, response.config)
+ throw createHttpError(
+ msg || $t('httpMsg.requestFailed'),
+ code ?? ApiStatus.error,
+ createErrorOptions(
+ response.config,
+ {
+ data: response.data,
+ status: response.status,
+ contentType: response.headers?.['content-type']
+ },
+ response
+ )
+ )
},
(error) => {
if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError()
return Promise.reject(handleError(error))
}
)
-function createHttpError(message, code) {
- return new HttpError(message, code)
+function createHttpError(message, code, options) {
+ return new HttpError(message, code, options)
}
-function handleUnauthorizedError(message) {
- const error = createHttpError(message || $t('httpMsg.unauthorized'), ApiStatus.unauthorized)
+function handleUnauthorizedError(message, config) {
+ const error = createHttpError(
+ message || $t('httpMsg.unauthorized'),
+ ApiStatus.unauthorized,
+ createErrorOptions(config)
+ )
if (!isUnauthorizedErrorShown) {
isUnauthorizedErrorShown = true
logOut()
@@ -94,6 +113,42 @@
ApiStatus.gatewayTimeout
].includes(statusCode)
}
+function createErrorOptions(config, extra = {}, response) {
+ return {
+ url: response?.request?.responseURL || resolveRequestUrl(config),
+ method: config?.method?.toUpperCase(),
+ ...extra
+ }
+}
+function isStandardResponse(payload) {
+ return payload !== null && typeof payload === 'object' && !Array.isArray(payload) && 'code' in payload
+}
+function createInvalidResponseError(response) {
+ const responseData = response?.data
+ const responseText =
+ typeof responseData === 'string' ? responseData.slice(0, 300) : responseData
+ const contentType = String(response?.headers?.['content-type'] || '')
+ const looksLikeHtml =
+ contentType.includes('text/html') ||
+ (typeof responseData === 'string' &&
+ /<(!doctype|html|head|body)\b/i.test(responseData.trim().slice(0, 120)))
+ const message = looksLikeHtml
+ ? $t('httpMsg.invalidHtmlResponse')
+ : $t('httpMsg.invalidResponseFormat')
+ return createHttpError(
+ message,
+ ApiStatus.error,
+ createErrorOptions(
+ response?.config,
+ {
+ data: responseText,
+ status: response?.status,
+ contentType
+ },
+ response
+ )
+ )
+}
async function retryRequest(config, retries = MAX_RETRIES) {
try {
return await request(config)
--
Gitblit v1.9.1