api-simplex-handler
Version:
一个api封装解析器
53 lines (46 loc) • 1.92 kB
text/typescript
import {ApiHandler} from "./ApiHandler";
import {IApi} from "./IApi";
import {
ExpectFunction,
FailFunction,
ResolveParams,
ResponseHandlerDefineFunction,
SuccessFunction
} from "./TypeDefine";
import {AxiosInstance, AxiosRequestConfig} from "axios";
import {ISendResponse} from "./ISendResponse";
class ApiHandlerAxios<T extends IApi> extends ApiHandler<T> {
axiosInstance: AxiosInstance
constructor(api: T, responseHandlerDefineFunction: ResponseHandlerDefineFunction, axiosInstance: AxiosInstance) {
super(api, responseHandlerDefineFunction);
this.axiosInstance = axiosInstance;
}
send(args: ResolveParams<T["params"]>): Promise<ISendResponse<any>> {
if (!this.api.path) return Promise.reject(`request path is undefined`)
let path = this.api.path
const config: AxiosRequestConfig<any> = {
method: this.api.method,
}
if (Array.isArray(this.api.params)) {
const params = ApiHandler.assemblyParameters(this.api.params, args, this.api);
if (typeof params === 'string')
path += params
else
config.data = params;
} else if (typeof this.api.params !== 'undefined') {
const params = ApiHandler.assemblyParametersToUnion(this.api.params, args, this.api);
path += params.path + params.query
config.data = params.body;
}
return this.axiosInstance(path, config)
.then(res => {
const response: ISendResponse<T> = {
code: res.data?.code ?? res.data?.status ?? res.status,
message: res.data?.message ?? res.data?.msg ?? res.statusText,
data: res.data?.data
}
return response
});
}
}
export {ApiHandlerAxios}