目录
- 基本流程
- 发送请求
- GET请求
- POST请求
- 一次性并发多个请求
- axios的API
- axios可以通过配置(config)来发送请求
- axios(config)
- axios(url[,config])
- 请求方式的别名,这里对所有已经支持的请求方式都提供了方便的别名
- 并发请求(concurrency),即是帮助处理并发请求的辅助函数
- 创建一个axios实例,并且可以自定义其配置
- 请求的配置(request config)
- 请求返回的内容
- 默认配置
- 拦截器
- 错误处理
- 取消
- 创建axios实例
转载:
axios
参考:
axio github
Axios中文
基本流程
安装: npm install axios --save
设置全局都可以使用axios
设置在 main.js 中引入 axios:
import axios from 'axios'
axios 改写为 Vue 的原型属性(不推荐这样用)
Vue.prototype.$http= axios
在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $http命令
例如
1 2 3 4 5 6 7 8 9 10 11
| methods: { show() { this.$http({ method: 'get', url: '/user', data: { name: 'virus' } }) } }
|
发送请求
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); });
|
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); });
|
一次性并发多个请求
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)来发送请求
axios(config)
1 2 3 4 5 6 7 8 9
| axios({ method:"POST", url:'/user/12345', data:{ firstName:"Fred", lastName:"Flintstone" } });
|
axios(url[,config])
请求方式的别名,这里对所有已经支持的请求方式都提供了方便的别名
1 2 3 4 5 6 7
| 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 2 3 4 5 6
| var instance = axios.create({ baseURL:"https://some-domain.com/api/", timeout:1000, headers: {'X-Custom-Header':'foobar'} });
|
1 2 3 4 5 6 7 8 9
|
axios axios axios axios axios axios axios
|
请求的配置(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 102 103
| { 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 9
| 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 2 3 4
| 1、 全局默认配置 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); });
|
取消
1、你可以通过一个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("操作被用户取消");
|
2、你可以给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();
|
创建axios实例
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
| # helpers.js import axios from 'axios' # 定义常量ERR_OK const ERR_OK = 0
# 导出一个getDate方法 export default getDate(url) { return function(params) { return axios.get(url, { params # 成功之后的.then方法 }).then((res) => { # 通过结构赋值的方法难道error和data的数值 const { error, data} = res.data # 如果成功的话,返回data数据 if(error === ERR_OK) { return data } # 如果失败的话打印失败的原因 }).catch(function(error) => { console.log("error:", error) }) } }
# 出口文件 # index.js import { getDate } from './helpers'
# 定义getSeller方法 const getSeller = getDate('./api/seller')
# 导出getSeller方法 export { getSeller }
|