博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
axios学习笔记
阅读量:6228 次
发布时间:2019-06-21

本文共 7275 字,大约阅读时间需要 24 分钟。

1、安装axios

npm安装:npm install axios --saveyarn安装:yarn add axiosVue安装:vue add axios

2、发送请求

有三种发送请求的方式:axios.get()、axios.post()、axios.all()    axios.get('/user?ID=12345')    //get请求        .then(function(res){            console.log(res.data);    //返回获取的数据            console.log(res.status);    //返回状态码:200、404            console.log(res.statusText);    //返回状态文本:OK            console.log(res.headers);    //返回响应头信息            console.log(res.config);    //返回请求的配置信息        }).catch(function(err){            console.log(err)        })                axios.post('/user',{    //post请求        name:'cai',        pwd:'111'    })    .then(function(response){        //请求成功    })    .then(function(err){        //请求失败    })            function getUser(){        return axios.get('/user/1234');    }    function getInfo(){        return axios.get('/user/1234/info')    }    axios.all([getUser(),getInfo()])        //并发请求    .then(axios.spread(function(user,info){        //当这两个请求都完成的时候会触发这个函数,两个参数分别代表返回的结果    }))    并发的API为:    axios.all(iterable);    axios.spread(callback);        请求方式的别名:    axios.request(config);    axios.get(url[,config]);    axios.delete(url[,config]);    axios.head(url[,config]);    axios.post(url[,data[,config]]);    axios.put(url[,data[,config]]);    axios.patch(url[,data[,config]])

3、axios全局默认配置

axios.defaults.baseURL='http://api.exmple.com';axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;axios.defaults.headers.post['content-Type'] = 'appliction/x-www-form-urlencoded';axios.defaults.withCredentials = true;   // axios 默认不发送cookie,需要全局设置true发送cookieaxios.defaults.baseURL = $core.use('http'); //确认协议和地址

4、自定义axios的配置

var instance=axios.create({    url:'/user',    //如果不是绝对地址,baseURL会自动加到url前面    methods:'post',    //默认为 get     baseURL:'https://www.xxx.com/api/',    params:{           id:123    //参数    },    data:{        name:'cai',    //需要被发送的数据仅适用于:put、post、patch        age:18    //当没有设置`transformRequest`选项时dada必须是以下几种类型之一        //string/plain/object/ArrayBuffer/ArrayBufferView/URLSearchParams        //仅仅浏览器:FormData/File/Bold        //仅node:Stream    }    paramsSerializer: function(params){    //序列化参数 (可选)        return Qs.stringify(params,{arrayFormat:'brackets'})    },    transformRequest:[function(data){    //请求发送到服务器之前,可在这对发送的数据做些改动,仅限于put、post、patch方法        return data;    //数组里面的最后一个函数必须返回一个字符串、-一个`ArrayBuffer`或者`Stream`    }],    transformResponse:[function(data){    //在数据传送到`then/catch`方法之前对得到的数据进行改动        return data;    }],    timeout:1000,    //请求超时最长1000毫秒    headers: {'X-Requested-With':'XMLHttpRequest'},    withCredentials:true,    //是否跨域请求,默认为false(跨域需要用到证书)    adapter:function(){        //返回一个promise,并提供验证返回        //可自定义处理请求,用于测试    },    auth:{    //开启http用户认证,重新设置Authorization头信息        username:'cai',        password:'123456'    },    responseType:'json',    //可选项是arraybuffer,blob,document,json,text,stream    xsrfCookieName: 'XSRF-TOKEN',//用作 xsrf token 值的 cookie 名称    xsrfHeaderName:'X-XSRF-TOKEN',//带有 xsrf token 值 http head 名称    onUploadProgress:function(progressEvent){        //上传进度事件,允许在上传过程中的做一些操作    },    onDownloadProgress:function(progressEvent){        //下载进度事件,允许在下载过程中的做一些操作    },    maxContentLength:2000,    //相应内容最大值    validateStatus:function(status){    //定义了是否根据http相应状态码,来resolve或者reject promise        return status >= 200 && status <300;//default    },    maxRedirects: 5,    //在nodejs中重定向的最大数量    httpAgent: new http.Agent({keeyAlive:true}),    //定义了当发送http请求要用到的自定义代理(默认:false)    httpsAgent: new https.Agent({keeyAlive:true}),    //定义了当发送https请求要用到的自定义代理(默认:false)    proxy: {        host:'127.0.0.1',    //proxy定义了主机名字和端口号        port: 9000,        auth: {            username:'Cai',            password:'123456'        }    },    cancelToken: new cancelToken(function(cancel){        //cancelToken定义了一个用于取消请求的cancel token    })})//当实例创建时候修改配置instance.defaults.headers.common["Authorization"] = AUTH_TOKEN;//使用自定义的axios实例instance.get('/longRequest',{    //这里的配置优先级高于上面的  timeout: 5000    //5秒后请求});

5、拦截器

//你可以在请求、响应在到达then/catch之前拦截他们//添加一个请求拦截器axios.interceptors.request.use(function(config){    //在请求发出之前进行一些操作,比如:显示loading图标    return config;},function(err){    //Do something with request error    return Promise.reject(error);});//添加一个响应拦截器axios.interceptors.response.use(function(res){    //在这里对返回的数据进行处理,比如隐藏loading图标    return res;},function(err){    //Do something with response error    return Promise.reject(error);})//取消拦截器var myInterceptor = axios.interceptor.request.use(function(){/*....*/});axios.interceptors.request.eject(myInterceptor);//给自定义的 axios 实例添加拦截器var instance = axios.create();instance.interceptors.request.use(function(){})

6、错误处理

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.header);        }else {          //一些错误是在设置请求的时候触发          console.log('Error',error.message);        }        console.log(error.config);    });

7、取消请求

var CancelToken = axios.CancelToken;    //通过一个cancel token来取消一个请求var source = CancelToken.source();    //通过CancelToken.source工厂函数来创建一个cancel tokenaxios.get('/user/12345',{    cancelToken: source.token}).catch(function(thrown){    if(axios.isCancel(thrown)){        console.log('取消请求',thrown.message);    }else {        //handle error    }});//取消请求(信息的参数可以设置的)source.cance("操作被用户取消");//换种写法var cancelToken = axios.CancelToken;var cance;axios.get('/user/12345',{    cancelToken: new CancelToken(function(c){        //这个executor函数接受一个cancel function作为参数        cancel = c;    })})//取消请求cancel();

8、get/delete 请求,也称作 query 请求

axios.get('/user', {  //params参数必写 , 如果没有参数传{}也可以    params: {         id: 12345,       name: user    }}).then(function (res) {    console.log(res);}).catch(function (err) {    console.log(err);});

9、post/put/patch 请求(三种传参方式)

1、传参格式为 formData     var formData=new new FormData();    formData.append('user','cai');    formData.append('pwd',123456);    axios.post('notice',formData)        .then((res)=>{return res})        .catch((err)=>{return err})        2、传参格式为 query 形式    第一种情况:使用 $qs.stringify        import Qs from 'qs'   //引入方式        Vue.prototype.$qs = Qs  //全局加载        this.$qs.stringify(data);  //使用方式        this.$qs.parse(data);  //使用方式        var readyData=this.$qs.stringify({            id:1234,            name:user        });        axios.post("/notice",readyData)             .then((res) => {return res})             .catch((err) => {return err})    第二种情况:使用 URLSearchParams(浏览器不支持,需要polyfill)        var params = new URLSearchParams();        params.append('param1', 'value1');        params.append('param2', 'value2');        axios.post('/foo', params);        3、 传参格式为 raw (JSON 格式)      第一种情况: axios 将 JavaScript 对象序列化为 JSON        var readyData={            id:1234,            name:user        };        axios.post("/notice",readyData)             .then((res) => {return res})             .catch((err) => {return err})     第二种情况:         var readyData=JSON.stringify({              id:1234,              name:user         });         axios.post("/notice",readyData)              .then((res) => {return res})              .catch((err) => {return err})

转载地址:http://pixna.baihongyu.com/

你可能感兴趣的文章
时空穿梭 探寻高端存储架构的前世今生
查看>>
中国企业应用数据分析大概情况和未来趋势
查看>>
阿里巴巴集团宣布60亿战略增资阿里云
查看>>
云计算Cloud Computing简介
查看>>
俄罗斯间谍黑客组织图拉劫持通信卫星链路盗取数据
查看>>
PM经验谈 项目管理工具必备的5个功能
查看>>
解读数据传输DTS技术架构及最佳实践
查看>>
谁来给电视盒子接班?
查看>>
CSS实现1px以内的移动
查看>>
2.4GHz、5GHz、60GHz,到底谁的无线信号又快又好?
查看>>
对实习生最慷慨的25家美国公司 猜每月多少薪水?
查看>>
《云计算揭秘企业实施云计算的核心问题》——第1章,第1.0节什么是云计算
查看>>
浅读亚太数据中心发展
查看>>
各地法院运用“大数据”“互联网+”提高司法效率
查看>>
让大数据助力全球能源互联网
查看>>
笔记:Ceph and Swift: Why we are not fighting.
查看>>
内蒙古首家智慧城市展示体验中心建成
查看>>
从专家诊病模型实例理解智慧医疗大数据
查看>>
D1net阅闻:Google开源iOS软件测试工具EarlGrey
查看>>
《Drupal实战》——第2章 为图书添加各种字段 2.1 下载并安装常用模块
查看>>