核心提示:爱可信基于承诺的HTTP请求客户端,可同时在浏览器和Node.js的中使用功能特性在浏览器中发送的XMLHttpRequest请求在node.js的中发送HTTP请求支持PromiseAPI拦截请求和...
爱可信
基于承诺的HTTP请求客户端,可同时在浏览器和Node.js的中使用
功能特性
在浏览器中发送的XMLHttpRequest请求在node.js的中发送HTTP请求支持PromiseAPI拦截请求和响应转换请求和响应数据自动转换JSON数据客户端支持保护安全免受XSRF攻击浏览器支持
安装
使用凉鞋
$ bower安装axios
使用NPM:
$ npm安装axios
例子
发送一个GET请求
//向具有给定ID的用户发出请求 axios.get('/用户?ID = 12345') 。然后(功能(响应){ 的的console.log(响应); }) .catch(功能(响应){ 的的console.log(响应); }); //可选地,上述请求也可以作为 axios.get('/ user',{ 参数:{ ID:12345 } }) 。然后(功能(响应){ 的的console.log(响应); }) .catch(功能(响应){ 的的console.log(响应); });
发送一个POST请求
axios.post('/ user',{ 名字: '弗雷德', 名字:“打火石” }) 。然后(功能(响应){ 的的console.log(响应); }) .catch(功能(响应){ 的的console.log(响应); });
发送多个并发请求
function getUserAccount(){ return axios.get('/ user / 12345'); } function getUserPermissions(){ return axios.get('/ user / 12345 / permissions'); } axios.all([getUserAccount(),getUserPermissions()]) 。然后(axios.spread(函数(ACCT,烫发){ //两个请求现在完成 }));
axios API
可以通过给爱可信传递对应的参数来定制请求:
爱可信(配置)
//发送POST请求 爱可信({ 方法: '后', url:'/ user / 12345', 资料:{ 名字: '弗雷德', 名字:“打火石” } });
axios(url [,config])
// Sned一个GET请求(默认方法) Axios公司('/用户/ 12345');
请求方法别名
为方便起见,我们为所有支持的请求方法都提供了别名
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]])
注意
当使用别名方法时,网址,方法和数据属性不需要在配置参数里面指定。
并发
处理并发请求的帮助方法
axios.all(迭代器)
axios.spread(回调)
创建一个实例
你可以用自定义配置创建一个新的爱可信实例。
axios.create([配置])
var instance = axios.create({ 基本URL: 'HTTPS://some-domain.com/api/', 超时:1000, 标题:{ 'X-定制报头': 'foobar的'} });
实例方法
所有可用的实例方法都列在下面了,指定的配置将会和该实例的配置合并。
爱可信公司#请求(配置)
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]])
请求配置
下面是可用的请求配置项,只有网址是必需的。如果没有指定方法,默认的请求方法是GET。
{ //`url`是要用于请求的服务器URL url:'/ user', //“方法”是在请求时使用的请求方法 方法: '得到',//默认 //`baseURL`将被添加到`url`,除非`url`是绝对的。 //可以方便的设置`baseURL`为一个实例的爱可信传递相对URL //到该实例的方法。 基本URL: 'HTTPS://some-domain.com/api/', //`transformRequest`允许在将请求数据发送到服务器之前进行更改 //这仅适用于请求方法 'PUT', 'POST' 和 'PATCH' //数组中的最后一个函数必须返回一个字符串或一个ArrayBuffer transformRequest:[功能(数据){ //做任何你想要转换的数据 返回数据; }], //`transformResponse`允许更改之前做出的响应数据 //它传递给/ catch transformResponse:[功能(数据){ //做任何你想要转换的数据 返回数据; }], //“头”是要发送的自定义标题 标题:{ 'X-请求-随着': '的XMLHttpRequest'}, //`params`是要与请求一起发送的URL参数 参数:{ ID:12345 }, //`paramsSerializer`是一个可选的函数,负责序列化`params` //(例如https://www.npmjs.com/package/qs,https://api.jquery.com/jquery.param/) paramsSerializer:功能(PARAMS){ return Qs.stringify(params,{arrayFormat:'bracket'}) }, //`data`是作为请求体发送的数据 //仅适用于请求方式 'PUT', 'POST' 和 'PATCH' //当没有设置`transformRequest`时,必须是字符串,ArrayBuffer或散列 资料:{ 名字: '弗雷德' }, //`timeout`指定请求超时前的毫秒数。 //如果请求比“超时”长,请求将被中止。 超时:1000, //“withCredentials”表示跨站点访问控制是否请求 //应该使用凭据 withCredentials:假的,//默认 //`adapter`允许自定义处理请求,使测试更容易。 //调用`resolve`或`reject`并提供一个有效的响应(参见[response docs](#response-api))。 适配器:函数(解析,拒绝,配置){ / * ... * / }, //`auth`表示应该使用HTTP Basic auth,并提供凭据。 //这将设置一个“授权”头,覆盖任何现有的 //使用`header`设置的`Authorization`自定义头文件。 AUTH:{ 用户名: 'janedoe', 密码: 's00pers3cret' } //“的responseType”表示服务器响应的数据类型 // options are'arraybuffer','blob','document','json','text' responseType:'json',// default //`xsrfCookieName`是用作XSRF令牌值的饼干的名称 xsrfCookieName: 'XSRF-TOKEN',//默认 //`xsrfHeaderName`是携带XSRF令牌值的HTTP头的名称 xsrfHeaderName: 'X-XSRF-TOKEN',//默认 //`progress'可以处理'POST'和'PUT uploads'的进度事件 //以及“GET”下载 进展:功能(progressEvent){ //用本地进度事件做任何你想要的 } }
响应的数据结构
响应的数据包括下面的信息:
{ //“数据”是服务器提供的响应 数据:{}, //“状态”是服务器响应的HTTP状态码 状态:200, //'statusText`是来自服务器响应的HTTP状态消息 状态文本: 'OK', //“头”服务器响应的头文件 标题:{}, //`config`是为请求提供给`axios`的配置 配置:{} }
当使用或者抓时,你会收到下面的响应:
axios.get('/用户/ 12345') 。然后(功能(响应){ 的的console.log(response.data); 的的console.log(response.status); 的的console.log(response.statusText); 的的console.log(response.headers); 的的console.log(response.config); });
默认配置
你可以为每一个请求指定默认配置。
全局爱可信默认配置
axios.defaults.baseURL ='https://api.example.com'; axios.defaults.headers.common ['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post ['Content-Type'] ='application / x-www-form-urlencoded';
自定义实例默认配置
//创建实例时设置默认值 var instance = axios.create({ 基本URL: 'HTTPS://api.example.com' }); //修改实例后的默认值 instance.defaults.headers.common ['Authorization'] = AUTH_TOKEN;
配置的优先顺序
配置将与优先顺序合并。该命令是库默认值,在实例中找到inlib / defaults.js,thendefaultsproperty,并且请求的finallyconfigargument。后者将优先于前者。这是一个例子。
//使用库提供的配置默认值创建一个实例 //此时,超时配置值为“0”,与库的默认值一样 var instance = axios.create(); //为库重写超时默认值 //现在所有的请求将等待2.5秒才能超时 instance.defaults.timeout = 2500; //覆盖此请求的超时时间,因为它已知需要很长时间 instance.get('/ longRequest',{ 超时:5000 });
拦截器
你可以在处理则或捕捞之前拦截请求和响应
//添加一个请求拦截器 axios.interceptors.request.use(函数(配置){ //发送请求之前做某事 返回配置 },函数(误差){ //做某些请求错误 return Promise.reject(error); }); //添加一个响应拦截器 axios.interceptors.response.use(功能(响应){ //用响应数据做某事 回报响应; },函数(误差){ //做某事与响应错误 return Promise.reject(error); });
移除一个拦截器:
var myInterceptor = axios.interceptors.request.use(function(){/*...*/}); axios.interceptors.request.eject(myInterceptor);
你可以给一个自定义的爱可信实例添加拦截器:
var instance = axios.create(); instance.interceptors.request.use(函数(){/*...*/});
错误处理
axios.get('/用户/ 12345') .catch(功能(响应){ if(response instanceof Error){ //设置触发错误的请求时发生了一些事情 的console.log( '错误',response.message); } else { //请求已经完成,但是服务器使用状态码进行响应 //超出了2XX的范围 的的console.log(response.data); 的的console.log(response.status); 的的console.log(response.headers); 的的console.log(response.config); } });
承诺
轴承依赖一个原生的ES6 Promise实现,如果你的浏览器环境不支持ES6 Promises,你需要引入polyfill
打字稿
爱可信包含一个打字稿定义
///进口*作为“爱可信”的轴; axios.get('?/用户ID = 12345');
积分
axios受到$ http服务提供者的极大启动。最终的axios是为在Angular之外使用独立的$ http服务。
执照
MIT