axios

作者: Gopal | 来源:发表于2017-11-13 16:19 被阅读1170次

项目中使用到axios,这里整理一下

axios的基础

为什么要使用axios?

什么是axios?

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

axios的特点

特点

例子

执行get请求

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行post请求

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行多个并发请求

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // 两个请求现在都执行完成
  }));

axios API

可以通过向axios传递相关的配置来创建请求
axios(config)

// 发送 POST 请求
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

axios(url[,config])

// 发送 GET 请求(默认的方法)
axios('/user/12345');

请求方法的别名

请求方法的别名

注意:在使用别名方法的时候,URL、method、data这些属性都不必在配置中指定

并发

处理并发请求的助手函数

axios.all(iterable)

axios.spread(callback)

响应结构
某个请求的响应包括以下信息

{
  // `data` 由服务器提供的响应
  data: {},

  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,

  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',

  // `headers` 服务器响应的头
  headers: {},

  // `config` 是为请求提供的配置信息
  config: {}
}

使用then的时候,你将接收下面这样的响应:

axios.get('/user/12345')
  .then(function(response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

在使用catch时候,或者传递rejection callback作为then的第二个参数时,响应可以通过error对象可被使用

错误处理

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // 请求已发出,但服务器响应的状态码不在 2xx 范围内
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

reference


项目中的使用

作用
使用axios插件来支持发送http请求

引入
import axios from 'axios'

封装axios
其中部分参数使用formatRequest方法处理

/**
 * 封装axios来发送http请求
 * @param request 部分参数被处理,参考 formatRequest 方法;
 * 注:其余选项参考 axios 的相关文档
 */
function httpRequest (request) {
  return new Promise((resolve, reject) => {
    axios.request(formatRequest(request))
      .then(function (response) {
        if (response.status === 200) {
          if (response.data.code === '0000') {
            // 后端请求发送成功
            resolve(response.data)
          } else {
            // window.alert(response.data.errorMsg)
            reject(response.data)
          }
        } else {
          // window.alert('response status error: ', response.status)
          reject()
        }
      })
      .catch(function (error) {
        // window.alert('request error: ', error)
        reject()
      })
  })
}

formatRequest方法

/**
 * 格式化http请求的相关配置项
 * @param request 请求配置对象
 */
function formatRequest (request) {
  if (request instanceof Object) {
    // 对url进行处理
    if (request.url) {
      request.url = REQUEST_CONFIG[request.url]
    }
    if (request.token) {
      // 对token进行处理
      if (request.headers && typeof request.headers === 'object') {
        if (request.headers.accessToken === undefined) {
          Object.assign(request.headers, {
            accessToken: request.token
          })
        }
      } else {
        request.headers = {
          accessToken: request.token
        }
      }
      delete request.token
    }
  }
  return request
}

其中REQUEST_CONFIG是引用了外部文件的对象
import REQUEST_CONFIG from '../config/request'

config文件下的request.js主要是为了统一方便API的管理

相关文章

网友评论

      本文标题:axios

      本文链接:https://www.haomeiwen.com/subject/uooamxtx.html