全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2023-12-14_增强你的 axios,分享一个基于 axios 的渐进式请求工具 - @varletaxle

您的位置:首页 >> 新闻 >> 行业资讯

增强你的 axios,分享一个基于 axios 的渐进式请求工具 - @varletaxle 点击关注公众号,”技术干货”及时达!同学们大家好,忙里偷闲把我在业务中封装的很多请求实用工具分享给大家,为了大家使用方便(也是为了我的开发团队使用方便),我将工具做成了一个库。不占用大家的时间我们直接进入正题,先丢仓库链接,然后介绍这个库是什么东西。 (最近业务压力略大,行文有些潦草,希望大家包涵) 库名: @varlet/axle github: https://github.com/varletjs/axle 设计原则完全继承 axios 的所有能力,并保留访问 axios 原始对象的能力,不破坏 axios 本身的行为。 介绍基于 axios 的渐进式请求工具。 它不会破坏 axios 原有的能力,帮助您更轻松地处理请求。 快速开始安装#通过npm,yarn,pnpm安装 #npm npmi@varlet/axle-S #yarn yarnadd@varlet/axle #pnpm pnpmadd@varlet/axle 发送请求Axle 归一化了请求函数的参数,并针对不同的业务需求,扩展了更多请求函数,下面是一个简单的例子。 import{createAxle}from'@varlet/axle' constaxle=createAxle(/**@seehttps://axios-http.com**/) axle.get('/url',{current:1,pageSize:10},{headers:{}}) axle.post('/url',{name:'Axle'},{headers:{}}) 配置Axle 完全支持 axios 的所有配置能力。 constaxle=createAxle(/**@seehttps://axios-http.com**/) //axle内置的axios,用法和axios一模一样,并且和axle共享配置。 const{axios}=axle axios.defaults.baseURL='https://api.example.com' axios.defaults.headers.common['TOKEN']=TOKEN axios.defaults.timeout=2500 //添加请求前拦截器 axios.interceptors.request.use( (config)={ //请求前处理 returnconfig }, (error)={ //请求错误处理 returnPromise.reject(error) } ) //添加请求后返回拦截器 axios.interceptors.response.use( (response)={ //任何位于2xx范围内的状态码都会导致该函数触发 //对响应数据做一些事情 returnresponse }, (error)={ //任何超出2xx范围的状态代码都会导致此函数触发 //对响应错误做一些事情 returnPromise.reject(error) } ) Axle & Axios 请求函数Axle 提供的请求函数可以帮助您更轻松地发送请求。 以下是一些示例,包括与 axios 的比较。 提示:下面只是以 get 和 post 为例,除此之外 Axle 还支持 options、head、delete、patch 、put 方法。 getJSON//axios axios.get('/url',{params:{id:1}}) //axle axle.get('/url',{id:1}) Blob//axios axios.get('/url',{params:{id:1},responseType:'blob'}) //axle axle.getBlob('/url',{id:1}) Text//axios axios.get('/url',{params:{id:1},responseType:'text'}) //axle axle.getText('/url',{id:1}) Document//axios axios.get('/url',{params:{id:1},responseType:'document'}) //axle axle.getDocument('/url',{id:1}) ArrayBuffer//axios axios.get('/url',{params:{id:1},responseType:'arraybuffer'}) //axle axle.getArrayBuffer('/url',{id:1}) Stream//axios axios.get('/url',{params:{id:1},responseType:'stream'}) //axle axle.getStream('/url',{id:1}) postJSON和 axios 一致。 //axios axios.post('/url',{name:'foo'}) //axle axle.post('/url',{name:'foo'}) application/x-www-form-urlencoded//axios axios.post('/url',qs.stringify({name:'foo'}),{ headers:{ 'Content-Type':'application/x-www-form-urlencoded', }, }) //axle axle.postUrlEncode('/url',{name:'foo'}) multipart/form-data//axios constformData=newFormData() formData.append('name','foo') formData.append('file',newFile()) axios.post('/url',formData,{ headers:{ 'Content-Type':'multipart/form-data', }, }) //axle axle.postMultipart('/url',{name:'foo',file:newFile()}) 实用工具通知浏览器下载文件import{download}from'@varlet/axle' download(awaitaxle.getBlob('/url',{id:1}),'filename') 公共 header 操作constheaders=axle.getHeaders() axle.setHeader('TOKEN',TOKEN) axle.removeHeader('TOKEN') 内置拦截器Axle 提供了一些实用的请求 / 响应拦截器,并且兼容 axle 和 axios,以下是一些使用案例。同时下方总结了一张所有内置拦截器的表格。 axiosimport{requestHeadersInterceptor,responseTimeoutInterceptor}from'@varlet/axle' constheadersInterceptor=requestHeadersInterceptor({ headers:()=({ token:localStorage.getItem('token'), 'Axle-Custom-Header':'Axle-Custom-Header', }) }) constretryInterceptor=responseRetryInterceptor({count:3}) axios.interceptors.request.use( headersInterceptor.onFulfilled, headersInterceptor.onRejected, headersInterceptor.options ) axios.interceptors.response.use( retryInterceptor.onFulfilled, retryInterceptor.onRejected, retryInterceptor.options ) axleimport{requestHeadersInterceptor,responseTimeoutInterceptor}from'@varlet/axle' axle.useRequestInterceptor( requestHeadersInterceptor({ headers:()=({ token:localStorage.getItem('token'), 'Axle-Custom-Header':'Axle-Custom-Header', }), }), ) axle.useResponseInterceptor(responseRetryInterceptor({count:3})) 拦截器通用参数 / 拦截器过滤每个内置拦截器都支持 include exclude axiosInterceptorOptions (与 axios 拦截器一致)。 include & exclude用于请求过滤,以确定什么请求应该应用该拦截器,支持指定 method 或是 glob 语法,使用方式如下。 axle.useResponseInterceptor( responseRetryInterceptor({ count:3, include:['method:put','method:post'], exclude:['/system/**','/user/addUser'] }), ) 内置拦截器一览名称描述requestHeadersInterceptor 用于自定义请求头requestMockInterceptor用于模拟数据responseRetryInterceptor用于实现请求异常重试responseStatusInterceptor用于拦截状态码responseBlobInterceptor用于拦截 blob 类型responseTimeoutInterceptor用于归一化超时异常Vue 组合式 APIAxle 提供了 Vue Composition API 风格的用法,封装了请求的 加载状态, 错误状态, 请求的上下行进度,返回数据,生命周期 等等,并继承了 axios 的所有配置。 scriptsetup import{createAxle}from'@varlet/axle' import{createUseAxle}from'@varlet/axle/use' constaxle=createAxle(/**@seehttps://axios-http.com**/) constuseAxle=createUseAxle({ axle, //可选项:useAxle的默认onTransform onTransform:(response)=response, }) const[users,getUsers,{loading,error,uploadProgress,downloadProgress,abort}]=useAxle({ //请求初始化数据 value:[], //请求方法 method:'get', //请求地址 url:'/user', //是否立即发送请求,默认值:false immediate:true, //请求前是否需要重置value,默认值:false resetValue:true, //请求参数,默认值:{} //当参数是一个对象时,发送第一个请求(immediate)时将携带它 //当参数是一个函数时,每次发送请求时都会携带它。 params:{current:1,pageSize:10}, //Axios配置,seehttps://axios-http.com config:{headers:{}}, //生命周期 onBefore(refs){ const{data,loading,error,uploadProgress,downloadProgress}=refs console.log(data.value,loading.value,error.value,uploadProgress.value,downloadProgress.value) //处理请求前逻辑 }, onTransform(response,refs){ //处理数据转换,转换后的数据将成为users的值。 returnresponse.data }, onSuccess(response,refs){ //处理请求成功逻辑 }, onError(error,refs){ //处理请求错误逻辑 }, onAfter(refs){ //处理请求结束逻辑,无论成功失败都会触发。 }, }) /script template span{{users}}/span span{{loading}}/span span{{error}}/span span{{uploadProgress}}/span span{{downloadProgress}}/span button@click="getUsers"发送请求/button button@click="abort"中断请求/button /template 并行请求实用工具Axle 提供了一些并行请求处理工具,请参考以下示例。 scriptsetup import{createAxle}from'@varlet/axle' import{createUseAxle,useValues,useAverageProgress,useHasLoading}from'@varlet/axle/use' constaxle=createAxle(/**@seehttps://axios-http.com**/) constuseAxle=createUseAxle({axle}) const[users,getUsers,{loading:isUsersLoading,downloadProgress:usersDownloadProgress}]=useAxle({ value:[], method:'get', url:'/user', }) const[roles,getRoles,{loading:isRolesLoading,downloadProgress:rolesDownloadProgress}]=useAxle({ value:[], method:'get', url:'/role', }) //所有请求结束时,loading为false constloading=useHasLoading(isUsersLoading,isRolesLoading) //所有请求结束时,downloadProgress为1 constdownloadProgress=useAverageProgress(usersDownloadProgress,rolesDownloadProgress) //Ref[ //[{name:'foo'},{name:'bar'}], //[{role:'admin'},{role:'user'}] //]- //[ //Ref[{name:'foo'},{name:'bar'}], //Ref[{role:'admin'},{role:'user'}] //] constusersRoles=useValues(users,roles) functionsendAllRequest(){ //parallel getUsers() getRoles() } /script template span{{usersRoles}}/span span{{loading}}/span span{{downloadProgress}}/span button@click="sendAllRequest"发送全部请求/button /template 结束希望能对一些同学的工作生活带来便利。 点击关注公众号,”技术干货”及时达! 阅读原文

上一篇:2020-12-26_优秀!电子科大90后博导入选“2020中国十大新锐科技人物” 下一篇:2023-08-11_KDD 2023 | 因果启发的可解释框架:大模型解释的高效之路

TAG标签:

16
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价