一、安装
1、 利用npm安装npm install axios --save
2、 利用bower安装bower install axios --save
3、 直接利用cdn引入<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
二、例子
1、 发送一个GET请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| axios.get('/user?ID=12345') .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); });
axios.get('/user',{ params:{ ID:12345 } }) .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); });
|
2、 发送一个POST请求
1 2 3 4 5 6 7 8 9 10
| axios.post('/user',{ firstName:'Fred', lastName:'Flintstone' }) .then(function(res){ console.log(res); }) .catch(function(err){ console.log(err); });
|
3、 一次性并发多个请求
1 2 3 4 5 6 7 8 9 10
| 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可以通过配置(config)来发送请求
1、 axios(config)
1 2 3 4 5 6 7 8 9
| axios({ method:"POST", url:'/user/12345', data:{ firstName:"Fred", lastName:"Flintstone" } });
|
2、 axios(url[,config])
(二)请求方式的别名,这里对所有已经支持的请求方式都提供了方便的别名
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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]])
|
注意:当我们在使用别名方法的时候,url,method,data这几个参数不需要在配置中声明
(三)并发请求(concurrency),即是帮助处理并发请求的辅助函数
1 2 3 4
| axios.all(iterable)
axios.spread(callback)
|
(四)创建一个axios实例,并且可以自定义其配置
1、 axios.create([config])
1 2 3 4 5
| var instance = axios.create({ baseURL:"https://some-domain.com/api/", timeout:1000, headers: {'X-Custom-Header':'foobar'} });
|
2、 实例的方法
一下是实例方法,注意已经定义的配置将和利用create创建的实例的配置合并
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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]])
|
四、请求的配置(request config)
以下就是请求的配置选项,只有url选项是必须的,如果method选项未定义,那么它默认是以GET的方式发出请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| { url:'/user', method:'get' baseURL:'https://some-domain.com/api/', transformRequest:[function(data){ return data; }], transformResponse:[function(data){ return data; }], headers: {'X-Requested-With':'XMLHttpRequest'}, params: { ID:12345 }, paramsSerializer: function(params){ return Qs.stringify(params,{arrayFormat:'brackets'}) }, data { firstName:"Fred" },
timeout:1000, withCredentials:false, adapter: function(config){ }, auth: { username:"zhangsan", password: "s00sdkf" }, responseType:'json', xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName:'X-XSRF-TOKEN', onUploadProgress:function(progressEvent){ onDownloadProgress:function(progressEvent){ } }, maxContentLength:2000, validateStatus:function(status){ return status >= 200 && status <300; }, maxRedirects: 5, httpAgent: new http.Agent({keeyAlive:true}), httpsAgent: new https.Agent({keeyAlive:true}), proxy: { host:'127.0.0.1', port: 9000, auth: { username:'skda', password:'radsd' } }, cancelToken: new cancelToken(function(cancel){
}) }
|
五、请求返回的内容
1 2 3 4 5 6 7 8 9 10 11
| {
data:{}, status:200, statusText:'OK', headers: {}, config: {} }
|
你可以这样来获取响应信息
1 2 3 4 5 6 7 8
| axios.get('/user/12345') .then(function(res){ console.log(res.data); console.log(res.status); console.log(res.statusText); console.log(res.headers); console.log(res.config); })
|
六、默认配置
你可以设置默认配置,对所有请求都有效
1、 全局默认配置
1 2 3
| 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';
|
2、 自定义的实例默认设置
1 2 3 4 5 6 7
| var instance = axios.create({ baseURL: 'https://api.example.com' });
instance.defaults.headers.common["Authorization"] = AUTH_TOKEN;
|
3、 配置中的有优先级
config配置将会以优先级别来合并,顺序是lib/defauts.js中的默认配置,然后是实例中的默认配置,最后是请求中的config参数的配置,越往后等级越高,后面的会覆盖前面的例子。
1 2 3 4 5 6 7 8 9 10
|
var instance = axios.create();
instance.defaults.timeout = 2500;
instance.get('/longRequest',{ timeout: 5000 });
|
七、拦截器
你可以在请求、响应在到达then/catch之前拦截他们
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| axios.interceptors.request.use(function(config){ return config; },function(err){ return Promise.reject(error); });
axios.interceptors.response.use(function(res){ return res; },function(err){ return Promise.reject(error); })
|
2、取消拦截器
1 2
| var myInterceptor = axios.interceptor.request.use(function(){}); axios.interceptors.request.eject(myInterceptor);
|
3、 给自定义的axios实例添加拦截器
1 2
| var instance = axios.create(); instance.interceptors.request.use(function(){})
|
八、错误处理
1 2 3 4 5 6 7 8 9 10 11 12 13
| axios.get('/user/12345') .catch(function(error){ if(error.response){ 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); });
|
九、取消
你可以通过一个cancel token来取消一个请求
你可以通过CancelToken.source工厂函数来创建一个cancel token
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var CancelToken = axios.CancelToken; var source = CancelToken.source();
axios.get('/user/12345',{ cancelToken: source.token }).catch(function(thrown){ if(axios.isCancel(thrown)){ console.log('Request canceled',thrown.message); }else { } });
source.cance("操作被用户取消");
|
你可以给cancelToken构造函数传递一个executor function来创建一个cancel token:
1 2 3 4 5 6 7 8 9 10
| var cancelToken = axios.CancelToken; var cance; axios.get('/user/12345',{ cancelToken: new CancelToken(function(c){ cancel = c; }) })
cancel();
|