Axios 详解

2022-12-24 0 1,029

一、axios概要

如前所述promise,用作应用程序和node.js的http应用程序

二、特征

全力支持应用程序和 node.js 全力支持 promise 能截击允诺和积极响应 能切换允诺和积极响应统计数据 能中止允诺 手动切换 JSON 统计数据 应用程序端全力支持避免 CSRF (considerably允诺假造)

三、加装

1、 借助 npm 加装 npm install axios –save2、 借助 bower 加装 bower install axios –save3、 间接借助 cdn 导入

四、范例

1、 推送两个GET允诺

//透过取值的ID来推送允诺 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允诺

axios.post(/user,{ firstName:Fred, lastName:Flintstone }) .then(function(res){ console.log(res); }) .catch(function(err){ console.log(err); });

3、 纸制mammalian数个允诺

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)

//推送两个`POST`允诺 axios({ method:”POST”, url:/user/12345, data:{ firstName:”Fred”, lastName:”Flintstone” } });

2、 axios(url[,config])

//推送两个`GET`允诺(默认的允诺形式) axios(/user/12345);

(二)、 允诺形式的别名,这里对所有已经全力支持的允诺形式都提供了方便的别名

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这几个参数不需要在配置中声明

(三)、 mammalian请求(concurrency),即是帮助处理mammalian允诺的辅助函数

//iterable是两个能迭代的参数如数组等 axios.all(iterable) //callback要等到所有允诺都完成才会执行 axios.spread(callback)

(四)、创建两个axios实例,并且能自定义其配置

1、 axios.create([config])

var instance = axios.create({ baseURL:”https://some-domain.com/api/”, timeout:1000, headers: {X-Custom-Header:foobar} });

2、 实例的方法

以下是实例方法,注意已经定义的配置将和借助create创建的实例的配置合并

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的形式发出允诺。

{ //`url`是允诺的服务器地址 url:/user, //`method`是允诺资源的形式 method:get//default //如果`url`不是绝对地址,那么`baseURL`将会加到`url`的前面 //当`url`是相对地址的时候,设置`baseURL`会非常的方便 baseURL:https://some-domain.com/api/, //`transformRequest`选项允许我们在允诺推送到服务器之前对请求的统计数据做出一些改动 //该选项只适用作以下允诺形式:`put/post/patch` //数组里面的最后两个函数必须返回两个字符串、-两个`ArrayBuffer`或者`Stream` transformRequest:[function(data){ //在这里根据自己的需求改变统计数据 return data; }], //`transformResponse`选项允许我们在统计数据传送到`then/catch`方法之前对统计数据进行改动 transformResponse:[function(data){ //在这里根据自己的需求改变统计数据 return data; }], //`headers`选项是需要被推送的自定义允诺头信息 headers: {X-Requested-With:XMLHttpRequest}, //`params`选项是要随允诺一起推送的允诺参数—-一般链接在URL后面 //他的类型必须是两个纯对象或者是URLSearchParams对象 params: { ID:12345 }, //`paramsSerializer`是两个可选的函数,起作用是让参数(params)序列化 //例如(https://www.npmjs.com/package/qs,http://api.jquery.com/jquery.param) paramsSerializer: function(params){ return Qs.stringify(params,{arrayFormat:brackets}) }, //`data`选项是作为两个允诺体而需要被推送的统计数据 //该选项只适用作方法:`put/post/patch` //当没有设置`transformRequest`选项时dada必须是以下几种类型之一 //string/plain/object/ArrayBuffer/ArrayBufferView/URLSearchParams //仅仅应用程序:FormData/File/Bold //仅node:Stream data { firstName:”Fred” }, //`timeout`选项定义了允诺发出的延迟毫秒数 //如果允诺花费的时间超过延迟的时间,那么允诺会被终止 timeout:1000, //`withCredentails`选项表明了是否是跨域允诺 withCredentials:false,//default //`adapter`适配器选项允许自定义处理允诺,这会使得测试变得方便 //返回两个promise,并提供验证返回 adapter: function(config){ /*……….*/ }, //`auth`表明HTTP基础的认证应该被使用,并提供证书 //这会设置两个authorization头(header),并覆盖你在header设置的Authorization头信息 auth: { username:”zhangsan”, password: “s00sdkf” }, //返回统计数据的格式 //其可选项是arraybuffer,blob,document,json,text,stream responseType:json,//default // xsrfCookieName: XSRF-TOKEN,//default xsrfHeaderName:X-XSRF-TOKEN,//default //`onUploadProgress`上传进度事件 onUploadProgress:function(progressEvent){ //下载进度的事件 onDownloadProgress:function(progressEvent){ } }, //相应内容的最大值 maxContentLength:2000, //`validateStatus`定义了是否根据http相应状态码,来resolve或者reject promise //如果`validateStatus`返回true(或者设置为`null`或者`undefined`),那么promise的状态将会是resolved,否则其状态就是rejected validateStatus:function(status){ return status >= 200 && status <300;//default }, //`maxRedirects`定义了在nodejs中重定向的最大数量 maxRedirects: 5,//default //`httpAgent/httpsAgent`定义了当推送http/https允诺要用到的自定义代理 //keeyAlive在选项中没有被默认激活 httpAgent: new http.Agent({keeyAlive:true}), httpsAgent: new https.Agent({keeyAlive:true}), //proxy定义了主机名字和端口号, //`auth`表明http基本认证应该与proxy代理链接,并提供证书 //这将会设置两个`Proxy-Authorization` header,并且会覆盖掉已经存在的`Proxy-Authorization` header proxy: { host:127.0.0.1, port: 9000, auth: { username:skda, password:radsd } }, //`cancelToken`定义了两个用作中止允诺的cancel token //详见cancelation部分 cancelToken: new cancelToken(function(cancel){ }) }

七、允诺返回的内容

{ data:{}, status:200, //从服务器返回的http状态文本 statusText:OK, //积极响应头信息 headers: {}, //`config`是在允诺的时候的一些配置信息 config: {} }
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、 全局默认配置

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、 自定义的实例默认设置

//当创建实例的时候配置默认配置 var instance = axios.create({ baseURL: https://api.example.com }); //当实例创建时候修改配置 instance.defaults.headers.common[“Authorization”] = AUTH_TOKEN;

3、 配置中的有优先级

config配置将会以优先级别来合并,顺序是lib/defauts.js中的默认配置,然后是实例中的默认配置,最后是允诺中的config参数的配置,越往后等级越高,后面的会覆盖前面的范例。

//创建两个实例的时候会使用libray目录中的默认配置 //在这里timeout配置的值为0,来自于libray的默认值 var instance = axios.create(); //回覆盖掉library的默认值 //现在所有的允诺都要等2.5S之后才会发出 instance.defaults.timeout = 2500; //这里的timeout回覆盖之前的2.5S变成5s instance.get(/longRequest,{ timeout: 5000 });

九、截击器

1、你能在允诺、积极响应在到达then/catch之前截击他们

//添加两个允诺截击器 axios.interceptors.request.use(function(config){ //在允诺发出之前进行一些操作 return config; },function(err){ //Do something with request error return Promise.reject(error); }); //添加两个积极响应截击器 axios.interceptors.response.use(function(res){ //在这里对返回的统计数据进行处理 return res; },function(err){ //Do something with response error return Promise.reject(error); })

2、中止截击器

var myInterceptor = axios.interceptor.request.use(function(){/*….*/}); axios.interceptors.request.eject(myInterceptor);

3、 给自定义的axios实例添加截击器

var instance = axios.create(); instance.interceptors.request.use(function(){})

十、错误处理

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); });

十一、中止

你能透过两个cancel token来中止两个允诺

你能透过CancelToken.source工厂函数来创建两个cancel token

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 { //handle error } }); //中止允诺(信息的参数能设置的) source.cance(“操作被用户中止”);

你能给cancelToken构造函数传递两个executor function来创建两个cancel token:

var cancelToken = axios.CancelToken; var cance; axios.get(/user/12345,{ cancelToken: new CancelToken(function(c){ //这个executor函数接受两个cancel function作为参数 cancel = c; }) }) //中止允诺 cancel();

觉得有帮助的小伙伴点个赞全力支持下~

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务