|
1 |
| -import axios, { |
2 |
| - AxiosInstance, |
3 |
| - InternalAxiosRequestConfig, |
4 |
| - AxiosRequestHeaders, |
5 |
| - AxiosResponse, |
6 |
| - AxiosError |
7 |
| -} from 'axios' |
| 1 | +// import qs from 'qs' |
8 | 2 |
|
9 |
| -import qs from 'qs' |
| 3 | +import axios from 'axios' |
| 4 | +import config from './config' |
| 5 | +import { AxiosInstance, InternalAxiosRequestConfig, RequestConfig, AxiosResponse } from './type' |
10 | 6 |
|
11 |
| -import { config } from './config' |
| 7 | +// import { ElMessage } from 'element-plus' |
12 | 8 |
|
13 |
| -import { ElMessage } from 'element-plus' |
| 9 | +// const { result_code, base_url } = config |
14 | 10 |
|
15 |
| -const { result_code, base_url } = config |
| 11 | +// export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] |
16 | 12 |
|
17 |
| -export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] |
| 13 | +// // 创建axios实例 |
| 14 | +// const service: AxiosInstance = axios.create({ |
| 15 | +// baseURL: PATH_URL, // api 的 base_url |
| 16 | +// timeout: config.request_timeout // 请求超时时间 |
| 17 | +// }) |
18 | 18 |
|
19 |
| -// 创建axios实例 |
20 |
| -const service: AxiosInstance = axios.create({ |
21 |
| - baseURL: PATH_URL, // api 的 base_url |
22 |
| - timeout: config.request_timeout // 请求超时时间 |
| 19 | +// // request拦截器 |
| 20 | +// service.interceptors.request.use( |
| 21 | +// (config: InternalAxiosRequestConfig) => { |
| 22 | +// if ( |
| 23 | +// config.method === 'post' && |
| 24 | +// (config.headers as AxiosRequestHeaders)['Content-Type'] === |
| 25 | +// 'application/x-www-form-urlencoded' |
| 26 | +// ) { |
| 27 | +// config.data = qs.stringify(config.data) |
| 28 | +// } |
| 29 | +// // ;(config.headers as AxiosRequestHeaders)['Token'] = 'test test' |
| 30 | +// // get参数编码 |
| 31 | +// if (config.method === 'get' && config.params) { |
| 32 | +// let url = config.url as string |
| 33 | +// url += '?' |
| 34 | +// const keys = Object.keys(config.params) |
| 35 | +// for (const key of keys) { |
| 36 | +// if (config.params[key] !== void 0 && config.params[key] !== null) { |
| 37 | +// url += `${key}=${encodeURIComponent(config.params[key])}&` |
| 38 | +// } |
| 39 | +// } |
| 40 | +// url = url.substring(0, url.length - 1) |
| 41 | +// config.params = {} |
| 42 | +// config.url = url |
| 43 | +// } |
| 44 | +// return config |
| 45 | +// }, |
| 46 | +// (error: AxiosError) => { |
| 47 | +// // Do something with request error |
| 48 | +// console.log(error) // for debug |
| 49 | +// Promise.reject(error) |
| 50 | +// } |
| 51 | +// ) |
| 52 | + |
| 53 | +// // response 拦截器 |
| 54 | +// service.interceptors.response.use( |
| 55 | +// (response: AxiosResponse<any>) => { |
| 56 | +// if (response.config.responseType === 'blob') { |
| 57 | +// // 如果是文件流,直接过 |
| 58 | +// return response |
| 59 | +// } else if (response.data.code === result_code) { |
| 60 | +// return response.data |
| 61 | +// } else { |
| 62 | +// ElMessage.error(response.data.message) |
| 63 | +// } |
| 64 | +// }, |
| 65 | +// (error: AxiosError) => { |
| 66 | +// console.log('err' + error) // for debug |
| 67 | +// ElMessage.error(error.message) |
| 68 | +// return Promise.reject(error) |
| 69 | +// } |
| 70 | +// ) |
| 71 | + |
| 72 | +// export { service } |
| 73 | + |
| 74 | +const { interceptors } = config |
| 75 | +const { requestInterceptors, responseInterceptors } = interceptors |
| 76 | + |
| 77 | +const abortControllerMap: Map<string, AbortController> = new Map() |
| 78 | + |
| 79 | +const axiosInstance: AxiosInstance = axios.create(config) |
| 80 | + |
| 81 | +axiosInstance.interceptors.request.use((res: InternalAxiosRequestConfig) => { |
| 82 | + const controller = new AbortController() |
| 83 | + const url = res.url || '' |
| 84 | + res.signal = controller.signal |
| 85 | + abortControllerMap.set(url, controller) |
| 86 | + return res |
23 | 87 | })
|
24 | 88 |
|
25 |
| -// request拦截器 |
26 |
| -service.interceptors.request.use( |
27 |
| - (config: InternalAxiosRequestConfig) => { |
28 |
| - if ( |
29 |
| - config.method === 'post' && |
30 |
| - (config.headers as AxiosRequestHeaders)['Content-Type'] === |
31 |
| - 'application/x-www-form-urlencoded' |
32 |
| - ) { |
33 |
| - config.data = qs.stringify(config.data) |
34 |
| - } |
35 |
| - // ;(config.headers as AxiosRequestHeaders)['Token'] = 'test test' |
36 |
| - // get参数编码 |
37 |
| - if (config.method === 'get' && config.params) { |
38 |
| - let url = config.url as string |
39 |
| - url += '?' |
40 |
| - const keys = Object.keys(config.params) |
41 |
| - for (const key of keys) { |
42 |
| - if (config.params[key] !== void 0 && config.params[key] !== null) { |
43 |
| - url += `${key}=${encodeURIComponent(config.params[key])}&` |
44 |
| - } |
45 |
| - } |
46 |
| - url = url.substring(0, url.length - 1) |
47 |
| - config.params = {} |
48 |
| - config.url = url |
49 |
| - } |
50 |
| - return config |
51 |
| - }, |
52 |
| - (error: AxiosError) => { |
53 |
| - // Do something with request error |
54 |
| - console.log(error) // for debug |
55 |
| - Promise.reject(error) |
56 |
| - } |
57 |
| -) |
| 89 | +axiosInstance.interceptors.request.use(requestInterceptors, responseInterceptors) |
58 | 90 |
|
59 |
| -// response 拦截器 |
60 |
| -service.interceptors.response.use( |
61 |
| - (response: AxiosResponse<any>) => { |
62 |
| - if (response.config.responseType === 'blob') { |
63 |
| - // 如果是文件流,直接过 |
64 |
| - return response |
65 |
| - } else if (response.data.code === result_code) { |
66 |
| - return response.data |
67 |
| - } else { |
68 |
| - ElMessage.error(response.data.message) |
69 |
| - } |
| 91 | +axiosInstance.interceptors.response.use( |
| 92 | + (res: AxiosResponse) => { |
| 93 | + const url = res.config.url || '' |
| 94 | + abortControllerMap.delete(url) |
| 95 | + return res.data |
70 | 96 | },
|
71 |
| - (error: AxiosError) => { |
72 |
| - console.log('err' + error) // for debug |
73 |
| - ElMessage.error(error.message) |
74 |
| - return Promise.reject(error) |
75 |
| - } |
| 97 | + (err: any) => err |
76 | 98 | )
|
77 | 99 |
|
78 |
| -export { service } |
| 100 | +// const request = (config: RequestConfig) => { |
| 101 | +// return new Promise((resolve, reject) => { |
| 102 | +// if (config.interceptors?.requestInterceptors) { |
| 103 | +// config = config.interceptors.requestInterceptors(config as any) |
| 104 | +// } |
| 105 | +// axiosInstance |
| 106 | +// .request(config) |
| 107 | +// .then((res) => { |
| 108 | +// if (config.interceptors?.responseInterceptors) { |
| 109 | +// res = config.interceptors.responseInterceptors(res) |
| 110 | +// } |
| 111 | + |
| 112 | +// resolve(res) |
| 113 | +// }) |
| 114 | +// .catch((err: any) => { |
| 115 | +// reject(err) |
| 116 | +// }) |
| 117 | +// }) |
| 118 | +// } |
0 commit comments