分享更有价值
被信任是一种快乐

vue如何封装axios

文章页正文上

今天小编给大家分享一下vue如何封装axios的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 vue封装axios可以提高代码质量、让使用更为便利。axios的API很友好,开发者完全可以很轻松地在项目中直接使用;不过随着项目规模增大,如果每发起一次HTTP请求,需要写一遍设置超时时间、设置请求头、错误处理等等操作。这种重复劳动不仅浪费时间,而且让代码变得冗余不堪,难以维护;为了提高我们的代码质量,应该在项目中二次封装一下axios再使用,这样可以让使用更为便利。axios是什么axios 是一个轻量的 HTTP客户端基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。自Vue2.0起,尤大宣布取消对 vue-resource 的官方推荐,转而推荐 axios。现在 axios 已经成为大部分 Vue 开发者的首选为什么要封装axios 的 API 很友好,你完全可以很轻松地在项目中直接使用。不过随着项目规模增大,如果每发起一次HTTP请求,就要把这些比如设置超时时间、设置请求头、根据项目环境判断使用哪个请求地址、错误处理等等操作,都需要写一遍这种重复劳动不仅浪费时间,而且让代码变得冗余不堪,难以维护。为了提高我们的代码质量,我们应该在项目中二次封装一下 axios 再使用举个例子:

axios('http://localhost:3000/data',{
//配置代码
method:'GET',
timeout:1000,
withCredentials:true,
headers:{
'Content-Type':'application/json',
Authorization:'xxx',
},
transformRequest:[function(data,headers){
returndata;
}],
//其他请求配置...}).then((data)=>{
//todo:真正业务逻辑代码
console.log(data);},(err)=>{
//错误处理代码
if(err.response.status===401){
//handleauthorizationerror
}
if(err.response.status===403){
//handleserverforbiddenerror
}
//其他错误处理.....
console.log(err);});

如果每个页面都发送类似的请求,都要写一堆的配置与错误处理,就显得过于繁琐了这时候我们就需要对axios进行二次封装,让使用更为便利如何封装封装的同时,你需要和 后端协商好一些约定,请求头,状态码,请求超时时间…….设置接口请求前缀:根据开发、测试、生产环境的不同,前缀需要加以区分请求头 : 来实现一些具体的业务,必须携带一些参数才可以请求(例如:会员业务)状态码: 根据接口返回的不同status , 来执行不同的业务,这块需要和后端约定好请求方法:根据get、post等方法进行一个再次封装,使用起来更为方便请求拦截器: 根据请求的请求头设定,来决定哪些请求可以访问响应拦截器: 这块就是根据 后端`返回来的状态码判定执行不同业务设置接口请求前缀利用node环境变量来作判断,用来区分开发、测试、生产环境

if(process.env.NODE_ENV==='development'){
axios.defaults.baseURL='http://dev.xxx.com'
}elseif(process.env.NODE_ENV==='production'){
axios.defaults.baseURL='http://prod.xxx.com'
}

在本地调试的时候,还需要在vue.config.js文件中配置devServer实现代理转发,从而实现跨域

devServer:{
proxy:{
'/proxyApi':{
target:'http://dev.xxx.com',
changeOrigin:true,
pathRewrite:{
'/proxyApi':''
}
}
}
}

设置请求头与超时时间大部分情况下,请求头都是固定的,只有少部分情况下,会需要一些特殊的请求头,这里将普适性的请求头作为基础配置。当需要特殊请求头时,将特殊请求头作为参数传入,覆盖基础配置

constservice=axios.create({
...
timeout:30000,//请求30s超时
	headers:{
get:{
'Content-Type':'application/x-www-form-urlencoded;charset=utf-8'
//在开发中,一般还需要单点登录或者其他功能的通用请求头,可以一并配置进来
},
post:{
'Content-Type':'application/json;charset=utf-8'
/免费云主机、域名/在开发中,一般还需要单点登录或者其他功能的通用请求头,可以一并配置进来
}
},
})

封装请求方法先引入封装好的方法,在要调用的接口重新封装成一个方法暴露出去

//get请求
exportfunctionhttpGet({
url,
params={}
}){
returnnewPromise((resolve,reject)=>{
axios.get(url,{
params
}).then((res)=>{
resolve(res.data)
}).catch(err=>{
reject(err)
})
})
}

//post
//post请求
exportfunctionhttpPost({
url,
data={},
params={}
}){
returnnewPromise((resolve,reject)=>{
axios({
url,
method:'post',
transformRequest:[function(data){
letret=''
for(letitindata){
ret+=encodeURIComponent(it)+'='+encodeURIComponent(data[it])+'&'
}
returnret
}],
//发送的数据
data,
//url参数
params

}).then(res=>{
resolve(res.data)
})
})
}

把封装的方法放在一个api.js文件中

import{httpGet,httpPost}from'./http'
exportconstgetorglist=(params={})=>httpGet({url:'apps/api/org/list',params})

页面中就能直接调用

//.vue
import{getorglist}from'@/assets/js/api'

getorglist({id:200}).then(res=>{
console.log(res)
})

这样可以把api统一管理起来,以后维护修改只需要在api.js文件操作即可请求拦截器
请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便

//请求拦截器
axios.interceptors.request.use(
config=>{
//每次发送请求之前判断是否存在token
//如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况,此处token一般是用户完成登录后储存到localstorage里的
token&&(config.headers.Authorization=token)
returnconfig
},
error=>{
returnPromise.error(error)
})

响应拦截器响应拦截器可以在接收到响应后先做一层操作,如根据状态码判断登录状态、授权

//响应拦截器
axios.interceptors.response.use(response=>{
//如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
//否则的话抛出错误
if(response.status===200){
if(response.data.code===511){
//未授权调取授权接口
}elseif(response.data.code===510){
//未登录跳转登录页
}else{
returnPromise.resolve(response)
}
}else{
returnPromise.reject(response)
}
},error=>{
//我们可以在这里对异常状态作统一处理
if(error.response.status){
//处理请求失败的情况
//对不同返回码对相应处理
returnPromise.reject(error.response)
}
})

以上就是“vue如何封装axios”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注云技术行业资讯频道。

相关推荐: Node.js中的垃圾回收机制是什么

这篇“Node.js中的垃圾回收机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js中的垃圾回收机制是什么”文章吧。GC,Ga…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册