axios 拦截器一些细节修改

This commit is contained in:
ray_wuhao 2023-06-06 17:41:17 +08:00
parent 5e1cf2f1a3
commit a359839d75
7 changed files with 79 additions and 45 deletions

View File

@ -25,9 +25,11 @@ export const appendRequestHeaders = (
instance: AxiosRequestConfig<unknown>,
options: RequestHeaderOptions[],
) => {
if (instance) {
const requestHeaders = instance.headers as RawAxiosRequestHeaders
options.forEach((curr) => {
requestHeaders[curr.key] = curr.value
})
}
}

View File

@ -20,6 +20,7 @@
*/
import RequestCanceler from '@/axios/helper/canceler'
import { getAppEnvironment } from '@use-utils/hook'
import type {
RequestInterceptorConfig,
@ -53,16 +54,25 @@ export const useAxiosInterceptor = () => {
axiosFetchInstance['responseInstance'] = instance
}
/** 获取请求实例或者响应实例 */
const getAxiosFetchInstance = (key: ImplementKey) => {
return axiosFetchInstance[key]
}
/** 请求前, 执行队列所有方法 */
const beforeAxiosFetch = (key: ImplementKey) => {
const funcArr = implement[getImplementKey(key)]
const instance = getAxiosFetchInstance(key)
const { MODE } = getAppEnvironment()
if (instance) {
funcArr?.forEach((curr) => {
if (typeof curr === 'function') {
curr()
curr(instance, MODE)
}
})
}
}
/** 设置拦截器队列 */
const setImplementQueue = (func: AnyFunc[], key: ImplementKey) => {
@ -76,11 +86,6 @@ export const useAxiosInterceptor = () => {
return implement[getImplementKey(key)]
}
/** 获取请求实例或者响应实例 */
const getAxiosFetchInstance = (key: ImplementKey) => {
return axiosFetchInstance[key]
}
return {
createRequestAxiosInstance,
createResponseAxiosInstance,

View File

@ -9,22 +9,25 @@
* @remark
*/
/** 请求拦截器入口 */
/**
*
*
* ,
* ,
*/
import { useAxiosInterceptor, axiosCanceler } from '@/axios/helper/interceptor'
import { appendRequestHeaders } from '@/axios/helper/axiosCopilot'
import type { RequestInterceptorConfig } from '@/axios/type'
const { getAxiosFetchInstance, setImplementQueue } = useAxiosInterceptor()
import type { RequestInterceptorConfig, ImplementFunction } from '@/axios/type'
const { setImplementQueue } = useAxiosInterceptor()
/** 注入请求头信息 */
const injectRequestHeaders = () => {
const request = getAxiosFetchInstance(
'requestInstance',
) as RequestInterceptorConfig
appendRequestHeaders(request, [
const injectRequestHeaders: ImplementFunction<RequestInterceptorConfig> = (
ins,
mode,
) => {
appendRequestHeaders(ins, [
{
key: 'X-TOKEN',
value: 'token',
@ -33,16 +36,19 @@ const injectRequestHeaders = () => {
}
/** 注入重复请求拦截器 */
const injectCanceler = () => {
const request = getAxiosFetchInstance(
'requestInstance',
) as RequestInterceptorConfig
axiosCanceler.removePendingRequest(request) // 检查是否存在重复请求, 若存在则取消已发的请求
axiosCanceler.addPendingRequest(request) // 把当前的请求信息添加到 pendingRequest 表中
const injectCanceler: ImplementFunction<RequestInterceptorConfig> = (
ins,
mode,
) => {
axiosCanceler.removePendingRequest(ins) // 检查是否存在重复请求, 若存在则取消已发的请求
axiosCanceler.addPendingRequest(ins) // 把当前的请求信息添加到 pendingRequest 表中
}
/** 注册请求拦截器 */
/**
*
*
* , setImplementQueue
*/
export const setupRequestInterceptor = () => {
setImplementQueue([injectRequestHeaders, injectCanceler], 'requestInstance')
}

View File

@ -9,24 +9,32 @@
* @remark
*/
/** 响应拦截器入口 */
/**
*
*
* ,
* ,
*/
import { useAxiosInterceptor, axiosCanceler } from '@/axios/helper/interceptor'
import type { ResponseInterceptorConfig } from '@/axios/type'
import type { ResponseInterceptorConfig, ImplementFunction } from '@/axios/type'
const { getAxiosFetchInstance, setImplementQueue } = useAxiosInterceptor()
const { setImplementQueue } = useAxiosInterceptor()
/** 响应成功后移除缓存请求 url */
const injectResponseCanceler = () => {
const response = getAxiosFetchInstance(
'responseInstance',
) as ResponseInterceptorConfig
axiosCanceler.removePendingRequest(response.config)
const injectResponseCanceler: ImplementFunction<ResponseInterceptorConfig> = (
ins,
mode,
) => {
axiosCanceler.removePendingRequest(ins.config)
}
/** 注册响应拦截器 */
/**
*
*
* , setImplementQueue
*/
export const setupResponseInterceptor = () => {
setImplementQueue([injectResponseCanceler], 'responseInstance')
}

View File

@ -89,3 +89,7 @@ export interface ImplementQueue {
implementRequestInterceptorArray: AnyFunc[]
implementResponseInterceptorArray: AnyFunc[]
}
export type ImplementFunction<
T = RequestInterceptorConfig | ResponseInterceptorConfig,
> = <K extends T>(ins: K, mode: string) => void

View File

@ -9,10 +9,19 @@
* @remark
*/
import { getDetermineEnv } from '@use-utils/hook'
/**
*
* onlyoffice
*
* ,
* , onlyoffice ,
* ,
*/
import { getAppEnvironment } from '@use-utils/hook'
import request from '@/axios/instance'
export const getOfficeDocumentApi = async (uuid: string) => {
const { VITE_APP_OFFICE_PROXY_URL } = getDetermineEnv()
const { VITE_APP_OFFICE_PROXY_URL } = getAppEnvironment()
const { get } = request
}

View File

@ -2,7 +2,7 @@
*
* @returns
*/
export const getDetermineEnv = () => {
export const getAppEnvironment = () => {
const env = import.meta.env
return env