1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| import axios from 'axios' import type { AxiosInstance } from 'axios' import { MyAxiosRequestConfig } from './type'
class Request { instance: AxiosInstance
constructor(config: MyAxiosRequestConfig) { // 创建一个aioxs的实例 this.instance = axios.create(config)
// 每一个实例都会经过 全局拦截器 this.instance.interceptors.request.use( (config) => { return config }, (err) => { return err } )
// 响应拦截器 this.instance.interceptors.response.use( (res) => { return res.data }, (err) => { return err } )
// 针对某一个实例来添加拦截器 局部的拦截器 if (config.interceptors) { this.instance.interceptors.request.use( config.interceptors.requestSuccessFn as any, config.interceptors.requestFailureFn ) this.instance.interceptors.response.use( config.interceptors.responseSuccessFn, config.interceptors.responseFailuresFn ) } }
// 封装网络请求方法 request<T = any>(config: MyAxiosRequestConfig<T>) { // 单次请求的成功拦截处理 if (config.interceptors?.requestSuccessFn) { config = config.interceptors.requestSuccessFn(config) }
return new Promise<T>((resolve, reject) => { this.instance .request<any, T>(config) .then((res) => { // 单次响应成功的拦截 if (config.interceptors?.responseSuccessFn) { res = config.interceptors.responseSuccessFn(res) }
resolve(res) }) .catch((err) => { reject(err) }) }) } get<T = any>(config: MyAxiosRequestConfig<T>) { return this.request({ ...config, method: 'GET' }) } post<T = any>(config: MyAxiosRequestConfig<T>) { return this.request({ ...config, method: 'POST' }) } put<T = any>(config: MyAxiosRequestConfig<T>) { return this.request({ ...config, method: 'PUT' }) } delete<T = any>(config: MyAxiosRequestConfig<T>) { return this.request({ ...config, method: 'DELETE' }) } }
export default Request
|