axios简述

╄→гoц情女王★ 提交于 2021-01-02 22:21:26

    在阅读本文前,建议先阅读 Promise 相关介绍 https://my.oschina.net/u/2563695/blog/4769779

  • 前言

     Vue中发送网络请求的方式

        XHR:XMLHttpRequest

        jQuery-Ajax:jQuery代码1w+行,Vue的代码才1w+行。所以没必要为了网络请求而引用这么重的框架。

        vue-resource:Vue1.x的时候, 推出了Vue-resource(体积小),但后来Vue作者改为推荐axios。

        axios:Vue官方当前推荐的网络请求框架。

  • axios简介

    可能是 axios: ajax i/o system 的简称。

    特点:支持 Promise API,可以拦截请求和响应,转换请求和响应数据。

   1. 基本使用

axios({
  url: url,
  method: 'get'/'post'
}).then(res => {
  console.log(res);
})

    2.axios.all

    使用axios.all, 可以同时发起多个请求,且在所有请求都响应后执行response。

    axios.all([]) 返回的结果是一个数组。

axios.all([
  axios({url: url1,}), 
  axios({url: url2, params: {}})
]).then(results => {
  console.log(results[0]);  //url1的响应
  console.log(results[1]);  //url2的响应
})

    使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2。

axios.all([
  axios({url: url1,}),
  axios({url: url2, params: {}})
]).then(axios.spread((res1, res2) => {
  console.log(res1);
  console.log(res2);
}))

    3.全局配置

    可以对axios进行全局配置。

请求地址  url: '/user',
请求类型  method: 'get',
请根路径  baseURL: 'http://www.mt.com/api',
请求前的数据处理  transformRequest:[function(data){}],
请求后的数据处理  transformResponse: [function(data){}],
自定义的请求头 headers:{'x-Requested-With':'XMLHttpRequest'},
URL查询对象 params:{ id: 12 },
查询对象序列化函数 paramsSerializer: function(params){ }
request body  data: { key: 'aa'},
超时设置  timeout: 1000,
跨域是否带Token  withCredentials: false,
自定义请求处理 adapter: function(resolve, reject, config){},
身份验证信息  auth: { uname: '', pwd: '12'},
响应的数据格式  responseType: 'json'(json/blob/document/arraybuffer/text/stream)

    如下配置的请求地址前缀和超时时间对所有axios发起的请求均生效。

axios.defaults.baseURL = 'http://172.10.8.8:8080'
axios.defaults.timeout = 5000

    4.axios实例

    可以创建不同的axios实例,进行不同的配置,从而达到封装的目的。

//创建对应的axios的实例
const instance1 = axios.create({
  baseURL: 'http://172.10.8.8:8080',
  timeout: 5000
})
//调用
instance1({
  url: '/sys/getUser'
}).then(res => {
  console.log(res);
})

    5.封装

    在项目中,可以使用如下方式,对axios进行封装。

export function request(config) {
  //1.创建axios的实例
  const instance = axios.create({
    baseURL: 'http://172.10.8.8:8080',
    timeout: 5000
  });

  //2.请求拦截的作用
  instance.interceptors.request.use(config => {
    //TODO sth.
    //拦截之后config需要返回,否则请求中就不带config了
    return config;
  }, err => {
    //TODO sth.
  })

  //3.响应拦截
  instance.interceptors.response.use(res => {
    //TODO sth.
    //对axios自带的属性进行过滤,返回controller中返回的数据
    return res.data;
  }, err => {
    //TODO sth.
  })

  //4.发送网络请求。axios本身返回的就是Promise对象。
  return instance(config)
}

//调用
request({
  url: '/sys/getUser',
  method: 'get',
  params: {id : id1}
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
});

 

感谢:以上内部部分参考王元红老师的vue资料。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!