diff --git a/src/axios/helper/axiosCopilot.ts b/src/axios/helper/axiosCopilot.ts index fae3a3a8..65ba5ab5 100644 --- a/src/axios/helper/axiosCopilot.ts +++ b/src/axios/helper/axiosCopilot.ts @@ -25,9 +25,11 @@ export const appendRequestHeaders = ( instance: AxiosRequestConfig, options: RequestHeaderOptions[], ) => { - const requestHeaders = instance.headers as RawAxiosRequestHeaders + if (instance) { + const requestHeaders = instance.headers as RawAxiosRequestHeaders - options.forEach((curr) => { - requestHeaders[curr.key] = curr.value - }) + options.forEach((curr) => { + requestHeaders[curr.key] = curr.value + }) + } } diff --git a/src/axios/helper/interceptor.ts b/src/axios/helper/interceptor.ts index cd3a7ab2..c9d0cf65 100644 --- a/src/axios/helper/interceptor.ts +++ b/src/axios/helper/interceptor.ts @@ -20,6 +20,7 @@ */ import RequestCanceler from '@/axios/helper/canceler' +import { getAppEnvironment } from '@use-utils/hook' import type { RequestInterceptorConfig, @@ -53,15 +54,24 @@ 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() - funcArr?.forEach((curr) => { - if (typeof curr === 'function') { - curr() - } - }) + if (instance) { + funcArr?.forEach((curr) => { + if (typeof curr === 'function') { + curr(instance, MODE) + } + }) + } } /** 设置拦截器队列 */ @@ -76,11 +86,6 @@ export const useAxiosInterceptor = () => { return implement[getImplementKey(key)] } - /** 获取请求实例或者响应实例 */ - const getAxiosFetchInstance = (key: ImplementKey) => { - return axiosFetchInstance[key] - } - return { createRequestAxiosInstance, createResponseAxiosInstance, diff --git a/src/axios/inject/requestInject.ts b/src/axios/inject/requestInject.ts index 51482602..09012734 100644 --- a/src/axios/inject/requestInject.ts +++ b/src/axios/inject/requestInject.ts @@ -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 = ( + 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 = ( + ins, + mode, +) => { + axiosCanceler.removePendingRequest(ins) // 检查是否存在重复请求, 若存在则取消已发的请求 + axiosCanceler.addPendingRequest(ins) // 把当前的请求信息添加到 pendingRequest 表中 } -/** 注册请求拦截器 */ +/** + * + * 注册请求拦截器 + * 请注意执行顺序, setImplementQueue 方法按照注册顺序执行 + */ export const setupRequestInterceptor = () => { setImplementQueue([injectRequestHeaders, injectCanceler], 'requestInstance') } diff --git a/src/axios/inject/responseInject.ts b/src/axios/inject/responseInject.ts index 41e20341..ad8f6f1c 100644 --- a/src/axios/inject/responseInject.ts +++ b/src/axios/inject/responseInject.ts @@ -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 = ( + ins, + mode, +) => { + axiosCanceler.removePendingRequest(ins.config) } -/** 注册响应拦截器 */ +/** + * + * 注册响应拦截器 + * 请注意执行顺序, setImplementQueue 方法按照注册顺序执行 + */ export const setupResponseInterceptor = () => { setImplementQueue([injectResponseCanceler], 'responseInstance') } diff --git a/src/axios/type.ts b/src/axios/type.ts index a3d780b0..9305ead3 100644 --- a/src/axios/type.ts +++ b/src/axios/type.ts @@ -89,3 +89,7 @@ export interface ImplementQueue { implementRequestInterceptorArray: AnyFunc[] implementResponseInterceptorArray: AnyFunc[] } + +export type ImplementFunction< + T = RequestInterceptorConfig | ResponseInterceptorConfig, +> = (ins: K, mode: string) => void diff --git a/src/office/index.ts b/src/office/index.ts index 7a4d8049..2ddf5541 100644 --- a/src/office/index.ts +++ b/src/office/index.ts @@ -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 } diff --git a/src/utils/hook.ts b/src/utils/hook.ts index fe23aeef..e516c499 100644 --- a/src/utils/hook.ts +++ b/src/utils/hook.ts @@ -2,7 +2,7 @@ * * @returns 获取当前项目环境 */ -export const getDetermineEnv = () => { +export const getAppEnvironment = () => { const env = import.meta.env return env