import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'; import type { RequestServiceError, CustomSuccessRequestResult, CustomFailRequestResult } from '@/interface'; /** * 封装各个请求方法及结果处理的类 * @author Soybean */ export default class Request { instance: AxiosInstance; constructor(instance: AxiosInstance) { this.instance = instance; } static successHandler(response: AxiosResponse) { const successResult: CustomSuccessRequestResult = { data: response as unknown as ResponseData, error: null, networkStatus: window.navigator.onLine }; return successResult; } static failHandler(error: RequestServiceError) { const failResult: CustomFailRequestResult = { data: null, error, networkStatus: window.navigator.onLine }; return failResult; } get(url: string, config?: AxiosRequestConfig) { return this.instance .get(url, config) .then(res => Request.successHandler(res)) .catch(Request.failHandler); } post(url: string, data?: any, config?: AxiosRequestConfig) { return this.instance .post(url, data, config) .then(res => Request.successHandler(res)) .catch(Request.failHandler); } put(url: string, data?: any, config?: AxiosRequestConfig) { return this.instance .put(url, data, config) .then(res => Request.successHandler(res)) .catch(Request.failHandler); } delete(url: string, config?: AxiosRequestConfig) { return this.instance .delete(url, config) .then(res => Request.successHandler(res)) .catch(Request.failHandler); } }