2020-04-16 00:23:24 +08:00
|
|
|
/*
|
|
|
|
* @Author: early-autumn
|
|
|
|
* @Date: 2020-04-15 12:45:18
|
|
|
|
* @LastEditors: early-autumn
|
2020-04-17 23:20:34 +08:00
|
|
|
* @LastEditTime: 2020-04-17 21:49:05
|
2020-04-16 00:23:24 +08:00
|
|
|
*/
|
2020-04-17 15:42:38 +08:00
|
|
|
import { AxiosRequestConfig, Data, AxiosResponse, AxiosBaseInstance, AxiosInstance } from './types';
|
2020-04-16 00:23:24 +08:00
|
|
|
import Axios from './core/Axios';
|
2020-04-17 00:18:59 +08:00
|
|
|
import Cancel from './cancel/Cancel';
|
|
|
|
import CancelToken from './cancel/CancelToken';
|
|
|
|
import isCancel from './cancel/isCancel';
|
|
|
|
import mergeConfig from './helper/mergeConfig';
|
2020-04-16 00:23:24 +08:00
|
|
|
import defaults from './helper/defaults';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建一个新的 Axios 实例
|
|
|
|
*
|
2020-04-17 12:06:41 +08:00
|
|
|
* 返回一个 Axios 实例增强
|
2020-04-16 00:23:24 +08:00
|
|
|
*/
|
2020-04-17 00:18:59 +08:00
|
|
|
function createInstance(config: AxiosRequestConfig): AxiosInstance {
|
2020-04-16 00:23:24 +08:00
|
|
|
const instance = new Axios(config);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 支持重载的 axios 函数
|
|
|
|
*
|
|
|
|
* @调用方式一
|
|
|
|
*
|
|
|
|
* @param url 调用方式一: 请求配置
|
|
|
|
* @param config 调用方式一: 空
|
|
|
|
*
|
|
|
|
* @调用方式二
|
|
|
|
*
|
|
|
|
* @param url 调用方式二: 请求地址
|
|
|
|
* @param config 调用方式二: 额外配置
|
|
|
|
*/
|
2020-04-17 15:42:38 +08:00
|
|
|
function axios<T extends Data>(
|
2020-04-17 00:18:59 +08:00
|
|
|
url: AxiosRequestConfig | string,
|
|
|
|
config: AxiosRequestConfig = {}
|
2020-04-16 00:23:24 +08:00
|
|
|
): Promise<AxiosResponse<T>> {
|
2020-04-17 00:18:59 +08:00
|
|
|
let requestConfig: AxiosRequestConfig;
|
2020-04-16 00:23:24 +08:00
|
|
|
|
|
|
|
// 调用方式一处理请求配置
|
|
|
|
if (typeof url !== 'string') {
|
|
|
|
requestConfig = url;
|
|
|
|
}
|
|
|
|
// 调用方式二处理请求配置
|
|
|
|
else {
|
|
|
|
requestConfig = { ...config, url };
|
|
|
|
}
|
|
|
|
|
|
|
|
return instance.request(requestConfig);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Axios 实例的所有属性和方法合并至 axios 函数
|
|
|
|
Object.assign(axios, instance);
|
|
|
|
|
|
|
|
return axios as AxiosInstance;
|
|
|
|
}
|
|
|
|
|
2020-04-17 12:06:41 +08:00
|
|
|
/**
|
|
|
|
* Axios 实例增强
|
|
|
|
*/
|
2020-04-17 00:18:59 +08:00
|
|
|
const axios = createInstance(defaults);
|
|
|
|
|
|
|
|
// 添加 create 工厂方法
|
2020-04-17 12:06:41 +08:00
|
|
|
axios.create = function create(config: AxiosRequestConfig): AxiosBaseInstance {
|
2020-04-17 00:18:59 +08:00
|
|
|
return createInstance(mergeConfig(axios.defaults, config));
|
|
|
|
};
|
|
|
|
|
2020-04-17 23:20:34 +08:00
|
|
|
// 添加 Axios 类
|
|
|
|
axios.Axios = Axios;
|
|
|
|
|
2020-04-17 00:18:59 +08:00
|
|
|
// 添加取消相关
|
|
|
|
axios.Cancel = Cancel;
|
|
|
|
axios.CancelToken = CancelToken;
|
|
|
|
axios.isCancel = isCancel;
|
|
|
|
|
|
|
|
export default axios;
|