核心提示:爱可信基于承诺的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


