console.info
该系类文章旨在研究 axios 的实现 。在研究源码的基础上,去理解 axios
是如何实现 ajax
请求并更好的去使用这个库。
参数
说说在调用 axios
时,需要传入的参数。
// eg: axios(config)
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
以下是 axios github 上关于 config
可传入参数的具体描述
{
// 请求地址
url: '/user',
// 请求方式
method: 'get', // default
// 请求地址的默认前缀
baseURL: 'https://some-domain.com/api/',
// 用于改变请求的函数数组
transformRequest: [(data, header) => {
// 改变请求内容
// 仅仅需要 return data 即可
return data;
}],
// 用于改变响应内容的函数数组
transformResponse: [(data) => {
// 改变响应内容
return data;
}],
// 公共头信息添加
headers: {'X-Requested-With': 'XMLHttpRequest'},
// 添加 queryString
params: {
ID: 12345
},
// 修改 queryString 的编写方式
paramsSerializer(params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
// 需要传递的数据,比如 post / json
data: {
firstName: 'Fred'
},
// 设置请求超时时间
timeout: 1000,
// 是否需要认证
withCredentials: false, // default: false
// 自定义请求发送器,一般不去修改
// 默认使用封装了 XMLHttpRequest 的发送器
adapter (config) {
/* ... */
},
// 需要认证时使用的用户名和密码
auth: {
username: 'janedoe',
password: 's00pers3cret'
},
// 响应返回类型
responseType: 'json', // default
// 跨域攻击问题
xsrfCookieName: 'XSRF-TOKEN', // default
// 跨域攻击问题
xsrfHeaderName: 'X-XSRF-TOKEN', // default
// 上传时的钩子
onUploadProgress: function (progressEvent) {
// 处理数据
},
// 下载时的钩子
onDownloadProgress: function (progressEvent) {
// 处理数据
},
// 响应的最大数据量
maxContentLength: 2000,
// 用于判断响应是否为有效响应
validateStatus (status) {
return status >= 200 && status < 300; // default
},
// 定义最多被重定向几次
maxRedirects: 5, // default
// 自定义发出 http 或是 https 的客户端
// 用于 node.js
httpAgent: new http.Agent({ keepAlive: true }),
httpsAgent: new https.Agent({ keepAlive: true }),
// 如果需要代理的话,添加代理信息
proxy: {
host: '127.0.0.1',
port: 9000,
auth: : {
username: 'mikeymike',
password: 'rapunz3l'
}
},
// 取消请求的钩子
cancelToken: new CancelToken(function (cancel) {
// ... 处理逻辑
cancle('cancle message'); // 调用即可取消该请求,需传入取消信息。
// ... 处理逻辑
})
}