前端axios在项目实战中的封装
简介
Axios是一个简单的基于Promise的HTTP请求库,用于浏览器客户端和node。js。
今天给大家讲一下,我们平时在项目中都是怎么使用它的安装npminstallaxiosS基本使用importaxiosfromaxios;axios。get(users)。then(res{console。log(res。data);});
平时我们都是使用vue这样的支持单页面(spa)开发的框架来完成业务页面开发,但是不大可能在每个页面上都像上面那样去引入axios然后调用接口,一般来说我们都会对axios做一次封装,从而可以对请求前和请求后做一些处理,比如说日志监控、错误处理等封装
我们可以在项目目录下建一个http。js文件,内容如下,我们以vue和elementui为例单独引入一次axiosimportaxiosfromaxios;vuex,里面存放着登录后的token信息,每次请求前要放到header里importstorefromstore;elementui的右上角提示信息组件及加载组件import{Notification,Loading}fromelementui;import{自定义超时时间,一般30秒TIMEOUTTIME,和后台约定这个值为1时,代表业务数据返回正常,其它情况有报错STATUSCODEOK,右上角提示信息停留时长,一般3秒NOTIFYSTAYTIME,这个值为401常量,代表请求是没有授权的,需要授权或登录CODEUNAUTHORIZED,header里jwt的token信息,用于每次请求的授权校验HEADERTOKENNAME}fromconfig;路由importrouterfromrouter;loading加载遮罩,请求前加全屏遮罩,防止重复请求letloadingInstacenull;创建axios实例constfetchaxios。create({请求的baseUrlbaseURL:process。env。VUEAPPBACKENDAPIPXURL,是否可以查cookiewithCredentials:true,请求超时时间timeout:TIMEOUTTIME,});request请求时拦截器fetch。interceptors。request。use((config){请求前加loading遮罩loadingInstaceLoading。service({lock:true,text:加载中,spinner:eliconloading,background:rgba(0,0,0,0。7),});if(store。getters。token){如果已经登录或授权,那么把token带在请求的header里config。headers〔HEADERTOKENNAME〕store。getters。token;}returnconfig;},(error){请求时报错了,关掉loading遮罩,防止页面卡死loadingInstaceloadingInstace。close();并把错误信息提示在页面右上角,统一处理Notification。error({title:错误,message:error。message,duration:NOTIFYSTAYTIME,});returnPromise。reject(error);});respone返回数据时拦截器fetch。interceptors。response。use((res){statusCode为200以下的会走这里关掉loading遮罩loadingInstaceloadingInstace。close();和后台约定的,如果返回的数据code不为1那么就是有业务错误并把后台返回的业务错误信息提示在页面上if(res。data。coderes。data。code!STATUSCODEOK){Notification。error({title:错误,message:res。data。msg,duration:NOTIFYSTAYTIME,});}returnres;},(err){返回结果statusCode不为200,一般为200以上常见的比如,401,500这些的关掉loading遮罩,防止页面卡死loadingInstaceloadingInstace。close();有返回数据时if(err。response){如果是401的话,说明没有授权或者登录,直接去授权或登录页if(err。response。statusCODEUNAUTHORIZED){router。push(login);}else{其他情况,把错误信息显示在页面上Notification。error({title:错误,message:err。message,duration:NOTIFYSTAYTIME,});}}elseif(err。request){request时错误信息,同上面一样的处理逻辑if(err。request。statusCODEUNAUTHORIZED){router。push(login);}else{Notification。error({title:错误,message:err。message,duration:NOTIFYSTAYTIME,});}}else{其它错误信息提示Notification。error({title:错误,message:err。message,duration:NOTIFYSTAYTIME,});}returnPromise。reject(err);});最终把封装的方法返回exportdefaultfetch;使用引入封装的httpimporthttpfromhttp获取个人用户的区域列表http({method:post,url:xxxxxx,请求参数data:{username:xxx,password:xxx}})。then(res{console。log(res})
觉得效果不错的请帮忙加个关注点个赞,经常分享前端实用开发技巧
iPhone12和iPhone12Pro听筒无声音召回计划和不知道你们有没有出现过这样的问题,我有过几次跟家里打电话时,说着说着听筒突然就没声音了,重新再打电话又恢复正常,一开始我以为是家里的手机出了问题,或者是信号有问题,直到8月28……
神奇乐园历险记发布放假啦版海报假期亲子观影再掀高潮星关系4月30日讯今日,由美国派拉蒙影片公司出品的合家欢冒险动画巨制《神奇乐园历险记》发布了一组放假啦版海报及预告。五一假期来临之际,朱妮和神奇乐园中可爱的小伙伴们在影院等待大……
倪妮雪暴仁心演绎林区医生哭戏动人角色心存大爱星关系4月30日讯日前,由崔斯韦执导,张震、倪妮、廖凡领衔主演,黄觉、刘桦、张奕聪主演,李光洁特别出演的电影《雪暴》在北京举办首映礼。发布会上倪妮一袭黑色长裙优雅动人,同时还展……
818十周年苏宁激情阿里京东冷淡电商第三大促何去何从?又是一年818!今年的818周年庆对于苏宁易购来说意义不同,这是在引入战投后苏宁易购迎来的第一个主场大促。相较于苏宁易购的激情澎湃,其他电商平台阿里、京东、拼多多等对于818电……
大学生电影节闭幕导演刘苗苗携新片红花绿叶回家星关系4月29日讯4月28日,第26届大学生电影节闭幕式在北京师范大学举行。本届大学生电影节,共有34部电影入围主竞赛单元,包括《流浪地球》、《疯狂外星人》、《超时空同居》、《……
锑矿要火?比尔盖茨出手投资锑电池来源:矿业界近日,美国初创储能公司AmbriInc宣布获得1。44亿美元融资,用于支持其新型电池的技术和商业化发展。本轮融资由战略投资者RelianceNewEnergy……
宽带1000兆什么体验?我的宽带就是千兆,刚装的那会,确实很兴奋,换了路由,换了网线,特意去找了电影下载,一部几个g的电影,一分钟就下个了,确实很快!但是,除此之外,也没有什么了!200m宽带够干的活……
音乐人文纪录电影尺八一声一世即将上映佐藤康夫空降高校巡展现场星关系4月28日讯4月26日,第六届中国国际大学生纪录片大赛暨高校巡展在广州启动。由聿馨(Helen)执导,佐藤康夫、小凑昭尚、蔡鸿文等主演,梁文道、陆川、龚琳娜特别出演的音乐……
买苹果手机的哪个型号比较好吗?如果是5000元内,建议选择苹果iPhone7128GB版本,目前128GB版本在苹果官网的售价为5388元。虽然现在iPhone7已经上市,但在性能方面iPhone7还是非常……
OPPO手机好还是vivo手机好?感谢您的阅读!OPPO手机好还是vivo手机好?我觉得在国产手机中有两个品牌,应该会让很多用户非常的习惯。第1个品牌是vivo,第2个品牌是OPPO,这两个品牌是目前国产……
胡歌娜扎等力荐比悲伤更悲伤的故事台词戳心风靡全网星关系3月15日讯年度最催泪爱情电影《比悲伤更悲伤的故事》已于白色情人节当天上映,3月15日发布一支低估爱情版预告。这部拿下2018年中国台湾华语片票房冠军的电影,同样征服了内……
三月首选爱情片比悲伤更悲伤的故事白色情人节公映星关系3月14日讯同档期最受期待爱情电影《比悲伤更悲伤的故事》3月14日白色情人节正式公映!这部由林孝谦执导,陈意涵、刘以豪、张书豪、陈庭妮主演的爱情片自公布引进内地的消息以来……