fix(fetch): fix
This commit is contained in:
102
api/fetch.ts
102
api/fetch.ts
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user