提交 1c92a9e4 作者: 方治民

fix: 修复 AxiosRequestConfig 类型使用问题

上级 b91927e3
import type { AxiosInstance, AxiosPromise, AxiosResponse, InternalAxiosRequestConfig } from 'axios' import type { AxiosInstance, AxiosPromise, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
import axios, { AxiosError } from 'axios' import axios, { AxiosError } from 'axios'
import type { RequestOptions, Result, UploadFileParams } from '/#/axios' import type { RequestOptions, Result, UploadFileParams } from '/#/axios'
import type { CreateAxiosOptions } from './axiosTransform' import type { CreateAxiosOptions } from './axiosTransform'
...@@ -13,7 +13,7 @@ import { ContentTypeEnum, RequestEnum } from '/@/enums/httpEnum' ...@@ -13,7 +13,7 @@ import { ContentTypeEnum, RequestEnum } from '/@/enums/httpEnum'
* @param config 请求配置 * @param config 请求配置
* @returns 请求结果 * @returns 请求结果
*/ */
axios.defaults.adapter = function (config: CreateAxiosOptions): AxiosPromise<any> { axios.defaults.adapter = function (config: InternalAxiosRequestConfig): AxiosPromise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const request = uni.request({ const request = uni.request({
method: config.method.toUpperCase() as RequestEnum, method: config.method.toUpperCase() as RequestEnum,
...@@ -125,6 +125,7 @@ export class VAxios { ...@@ -125,6 +125,7 @@ export class VAxios {
!ignoreCancel && axiosCanceler.addPending(config) !ignoreCancel && axiosCanceler.addPending(config)
if (requestInterceptors && isFunction(requestInterceptors)) { if (requestInterceptors && isFunction(requestInterceptors)) {
// @ts-expect-error
config = requestInterceptors(config, this.options) config = requestInterceptors(config, this.options)
} }
return config return config
...@@ -156,7 +157,7 @@ export class VAxios { ...@@ -156,7 +157,7 @@ export class VAxios {
/** /**
* @description: File Upload * @description: File Upload
*/ */
uploadFile<T = any>(config: InternalAxiosRequestConfig, params: UploadFileParams) { uploadFile<T = any>(config: AxiosRequestConfig, params: UploadFileParams) {
const formData = new window.FormData() const formData = new window.FormData()
const customFilename = params.name || 'file' const customFilename = params.name || 'file'
...@@ -221,7 +222,7 @@ export class VAxios { ...@@ -221,7 +222,7 @@ export class VAxios {
} }
// support form-data // support form-data
supportFormData(config: InternalAxiosRequestConfig) { supportFormData(config: AxiosRequestConfig) {
const headers = config.headers || this.options.headers const headers = config.headers || this.options.headers
const contentType = headers?.['Content-Type'] || headers?.['Content-Type'] const contentType = headers?.['Content-Type'] || headers?.['Content-Type']
...@@ -239,24 +240,24 @@ export class VAxios { ...@@ -239,24 +240,24 @@ export class VAxios {
} }
} }
get<T = any>(config: InternalAxiosRequestConfig, options?: RequestOptions): Promise<T> { get<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
return this.request({ ...config, method: 'GET' }, options) return this.request({ ...config, method: 'GET' }, options)
} }
post<T = any>(config: InternalAxiosRequestConfig, options?: RequestOptions): Promise<T> { post<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
return this.request({ ...config, method: 'POST' }, options) return this.request({ ...config, method: 'POST' }, options)
} }
put<T = any>(config: InternalAxiosRequestConfig, options?: RequestOptions): Promise<T> { put<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
return this.request({ ...config, method: 'PUT' }, options) return this.request({ ...config, method: 'PUT' }, options)
} }
delete<T = any>(config: InternalAxiosRequestConfig, options?: RequestOptions): Promise<T> { delete<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
return this.request({ ...config, method: 'DELETE' }, options) return this.request({ ...config, method: 'DELETE' }, options)
} }
request<T = any>(config: InternalAxiosRequestConfig, options?: RequestOptions): Promise<T> { request<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> {
let conf: CreateAxiosOptions = cloneDeep(config) let conf = cloneDeep(config) as CreateAxiosOptions
const transform = this.getTransform() const transform = this.getTransform()
const { requestOptions } = this.options const { requestOptions } = this.options
......
import type { Canceler, InternalAxiosRequestConfig } from 'axios' import type { AxiosRequestConfig, Canceler } from 'axios'
import axios from 'axios' import axios from 'axios'
import { isFunction } from '/@/utils/is' import { isFunction } from '/@/utils/is'
// Used to store the identification and cancellation function of each request // Used to store the identification and cancellation function of each request
let pendingMap = new Map<string, Canceler>() let pendingMap = new Map<string, Canceler>()
export function getPendingUrl(config: InternalAxiosRequestConfig) { export function getPendingUrl(config: AxiosRequestConfig) {
return [config.method, config.url].join('&') return [config.method, config.url].join('&')
} }
...@@ -14,7 +14,7 @@ export class AxiosCanceler { ...@@ -14,7 +14,7 @@ export class AxiosCanceler {
* Add request * Add request
* @param {Object} config * @param {Object} config
*/ */
addPending(config: InternalAxiosRequestConfig) { addPending(config: AxiosRequestConfig) {
this.removePending(config) this.removePending(config)
const url = getPendingUrl(config) const url = getPendingUrl(config)
config.cancelToken = config.cancelToken =
...@@ -41,7 +41,7 @@ export class AxiosCanceler { ...@@ -41,7 +41,7 @@ export class AxiosCanceler {
* Removal request * Removal request
* @param {Object} config * @param {Object} config
*/ */
removePending(config: InternalAxiosRequestConfig) { removePending(config: AxiosRequestConfig) {
const url = getPendingUrl(config) const url = getPendingUrl(config)
if (pendingMap.has(url)) { if (pendingMap.has(url)) {
......
/** /**
* Data processing class, can be configured according to the project * Data processing class, can be configured according to the project
*/ */
import type { AxiosResponse, InternalAxiosRequestConfig } from 'axios' import type { AxiosRequestConfig, AxiosResponse } from 'axios'
import type { RequestOptions, Result } from '/#/axios' import type { RequestOptions, Result } from '/#/axios'
export interface CreateAxiosOptions extends InternalAxiosRequestConfig { export interface CreateAxiosOptions extends AxiosRequestConfig {
authenticationScheme?: string authenticationScheme?: string
transform?: AxiosTransform transform?: AxiosTransform
requestOptions?: RequestOptions requestOptions?: RequestOptions
...@@ -16,15 +16,15 @@ export abstract class AxiosTransform { ...@@ -16,15 +16,15 @@ export abstract class AxiosTransform {
* 允许动态修改本次请求的 config 和 options * 允许动态修改本次请求的 config 和 options
*/ */
inject?: ( inject?: (
config: InternalAxiosRequestConfig, config: AxiosRequestConfig,
options: RequestOptions, options: RequestOptions,
) => { config: InternalAxiosRequestConfig; options: RequestOptions } ) => { config: AxiosRequestConfig; options: RequestOptions }
/** /**
* @description: Process configuration before request * @description: Process configuration before request
* @description: Process configuration before request * @description: Process configuration before request
*/ */
beforeRequestHook?: (config: InternalAxiosRequestConfig, options: RequestOptions) => InternalAxiosRequestConfig beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig
/** /**
* @description: Request successfully processed * @description: Request successfully processed
...@@ -39,10 +39,7 @@ export abstract class AxiosTransform { ...@@ -39,10 +39,7 @@ export abstract class AxiosTransform {
/** /**
* @description: 请求之前的拦截器 * @description: 请求之前的拦截器
*/ */
requestInterceptors?: ( requestInterceptors?: (config: AxiosRequestConfig, options: CreateAxiosOptions) => AxiosRequestConfig
config: InternalAxiosRequestConfig,
options: CreateAxiosOptions,
) => InternalAxiosRequestConfig
/** /**
* @description: 请求之后的拦截器 * @description: 请求之后的拦截器
......
...@@ -268,7 +268,7 @@ export const defHttp = createAxios({ ...@@ -268,7 +268,7 @@ export const defHttp = createAxios({
// other api url // other api url
// export const otherHttp = createAxios({ // export const otherHttp = createAxios({
// transform: { // transform: {
// inject: (config: InternalAxiosRequestConfig<any>, options: http.RequestOptions) => { // inject: (config: AxiosRequestConfig<any>, options: http.RequestOptions) => {
// // TODO: 根据实际项目配置 // // TODO: 根据实际项目配置
// return { config, options } // return { config, options }
// }, // },
......
import type { InternalAxiosRequestConfig } from 'axios' import type { AxiosRequestConfig } from 'axios'
declare global { declare global {
type Recordable<T = any> = Record<string, T> type Recordable<T = any> = Record<string, T>
...@@ -49,7 +49,7 @@ declare global { ...@@ -49,7 +49,7 @@ declare global {
retryRequest?: RetryRequest retryRequest?: RetryRequest
} }
type RequestConfig<T = any> = InternalAxiosRequestConfig<T> type RequestConfig<T = any> = AxiosRequestConfig<T>
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论