2-12 Axios在销户项目里的应用

销户系统

项目里的axios实例封装了拦截器,转驼峰等方法。
Axios官方中文文档

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

1.http协议和web应用有状态和无状态浅析

2.HTTP 方法:GET 对比 POST

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);
  }
);

猜你喜欢

转载自blog.csdn.net/qq_36620428/article/details/87069790