fix(common): fix

This commit is contained in:
zhangheng
2026-03-16 17:10:13 +08:00
parent 8d3ebbb31d
commit c8b2311488
7 changed files with 97 additions and 76 deletions

View File

@@ -50,9 +50,11 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
},
}
const createSsrRequest: (options: OptionsProps, token?: string) => Request = (
options
) => {
const createSsrRequest: (
options: OptionsProps,
token?: string,
refreshToken?: string
) => Request = (options) => {
// 设置请求头
let myHeaders = new Headers()
if (!options.isUpload && !options.isFormData && !options.notJson) {
@@ -85,14 +87,17 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
return request
}
const createCsrRequest: (options: OptionsProps, token?: string) => Request = (
options,
token = ""
) => {
const createCsrRequest: (
options: OptionsProps,
token?: string,
refreshToken?: string
) => Request = (options, token = "", refreshToken = "") => {
let request = new Request(options.url)
// 设置请求头
let myHeaders = new Headers()
myHeaders.append("Authorization", `bearer ${token}`)
myHeaders.append("Token", token)
myHeaders.append("Refresh-Token", refreshToken)
if (!options.isUpload && !options.isFormData && !options.notJson) {
myHeaders.append("Content-Type", "application/json")
}
@@ -139,7 +144,7 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
? createSsrRequest
: createCsrRequest
const request = createNewRequest(options, access_token)
const request = createNewRequest(options, access_token, refresh_token)
return new Promise((resolved, rejected) => {
fetch(request)
@@ -171,22 +176,18 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
}
} else if (status === 401) {
try {
const refreshResponse = await refreshKey({
token: refresh_token,
const refreshResponse = await refreshKey()
let access_token = refreshResponse?.access || ""
let refresh_token = refreshResponse?.refresh || ""
refreshToken({
refresh_token,
access_token,
})
if (refreshResponse.code === 200) {
let access_token = refreshResponse.message?.access || ""
let refresh_token = refreshResponse.message?.refresh || ""
refreshToken({
refresh_token,
access_token,
})
const retry_request = createNewRequest(options, access_token)
const retry_response = await fetch(retry_request)
return options.isDownload
? retry_response.blob()
: retry_response.json()
}
const retry_request = createNewRequest(options, access_token)
const retry_response = await fetch(retry_request)
return options.isDownload
? retry_response.blob()
: retry_response.json()
} catch (error) {
rejected(error)
try {
@@ -231,7 +232,17 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
const data = await response.json()
const { message: errInfo } = data
Message.error({ content: errInfo || "" })
throw new Error(errInfo)
// throw new Error(errInfo)
rejected(errInfo)
try {
await deleteCookie()
} catch (error) {
rejected(error)
} finally {
// 清空身份信息并跳转至登录页面
removeUserInfo()
window.location.href = "/login"
}
} else if (status >= 510) {
Message.error({ content: "申请资源不足!" })
throw new Error("申请资源不足!")
@@ -242,43 +253,26 @@ async function httpfetch<T>(options: OptionsProps): Promise<T> {
}
})
.then(async (response) => {
const { code, message: errInfo } = response
const code = response?.code
const errInfo = response?.message || ""
if (response) {
if (isNumber(code)) {
let status = code
// 日后做相关处理
if (status === 401) {
try {
const refreshResponse = await refreshKey({
token: refresh_token,
const refreshResponse = await refreshKey()
let access_token = refreshResponse?.access || ""
let refresh_token = refreshResponse?.refresh || ""
refreshToken({
refresh_token,
access_token,
})
if (refreshResponse.code === 200) {
let access_token = refreshResponse.message?.access || ""
let refresh_token = refreshResponse.message?.refresh || ""
refreshToken({
refresh_token,
access_token,
})
const retry_request = createNewRequest(options, access_token)
const retry_response = await fetch(retry_request)
return options.isDownload
? retry_response.blob()
: retry_response.json()
} else {
if (refreshResponse.code === 406) {
try {
await deleteCookie()
} catch (error) {
rejected(error)
} finally {
// 清空身份信息并跳转至登录页面
removeUserInfo()
window.location.href = "/login"
}
} else {
throw new Error("重新获取token失败")
}
}
const retry_request = createNewRequest(options, access_token)
const retry_response = await fetch(retry_request)
return options.isDownload
? retry_response.blob()
: retry_response.json()
} catch (error) {
rejected(error)
}