销户系统
项目里的axios实例封装了拦截器,转驼峰等方法。
Axios官方中文文档
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
- 从浏览器中创建 XMLHttpRequests
- 从 node.js 创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换 JSON 数据
- 客户端支持防御 XSRF
3.配置的默认值/defaults
你可以指定将被用在各个请求的配置默认值
全局的 axios 默认值
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
自定义实例默认值
// 创建实例时设置配置的默认值
var instance = axios.create({
baseURL: 'https://api.example.com'
});
// 在实例已创建后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
4.拦截器
在请求或响应被 then 或 catch 处理前拦截它们。
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response;
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error);
});
项目里的,实现效果就是自动取response
里的data
resultList
下的数据封装为data
,以及自动把数据转为驼峰格式。
以及APIObserver
发送了错误事件
/**
* 反馈拦截
*/
xhr.interceptors.response.use(
response => {
// 完整返回打印
// console.log('xhr response', response);
let camelResponse: any = {};
// 接口 code 错误处理
statusErrorHandler(
response.data.error.error_no,
response.data.error.error_info
);
if (!response.data.data) {
// 操作正确只是没有返回数据的
if (response.data.error.error_no == 0) {
response.data.data = {};
} else {
// 没正确数据的直接返回
return Promise.reject(response.data.error.error_info);
}
}
// 循环字段,改为驼峰
camelResponse = keyTransf(camelResponse, response.data.data);
// 列表
if (camelResponse.resultList) {
camelResponse = camelResponse.resultList;
}
// 将驼峰格式数据返回
response.data = camelResponse;
console.log('API response', camelResponse);
return response;
},
error => {
console.log('API response error:', error);
// http反馈错误 > 300 || < 200
APIObserver.$emit(APIEvents.responseHTTPError, error);
return Promise.reject(error);
}
);