500拦截报错 axios_axios拦截设置和错误处理

本文介绍了一种使用 Axios 拦截器进行全局错误处理的方法,包括请求超时、401和403错误的处理,并封装 Axios get 方法确保错误信息通过 resolve 返回,简化了错误处理流程。在 main.js 中注册服务模块,使得在组件中可以通过 this.$service 调用接口,简化了接口调用并实现了统一的错误提示。
摘要由CSDN通过智能技术生成

目前想出的处理接口请求进行全局错误提示 的最佳方案,axios整体配置如下

1.基于axiso.interceptors进行响应拦截: 主要负责全局提示错误

axios.interceptors.request.use(

config => {

config.timeout = 30000;

return config;

},

err => {

return Promise.reject(err);

}

)

axios.interceptors.response.use(

response => {

// 根据后端约定,response.data形式为{success:boolean, message:string, content:any}

if (response.data.success) {

return response.data

} else {

iView.Notice.error({

title: '错误',

desc: response.data.message

})

Promise.reject(response.data.message)

}

},

error => {

if (error.response) {

if (error.response.status === 401) {

// 这种情况一般调到登录页

} else if (error.response.status === 403) {

// 提示无权限等

} else {

// 其他错误处理

}

}

return Promise.reject(error.response.data)

}

)

2. 封装axios方法(比如get)

主要负责将所有的结果(包括错误)都通过reslove来处理,这样下一级直接then就可以得到所有的结果,而且使用await语法使,不需要try..catch...

axiosGet: (url, config, showLoading = true) => {

if (showLoading) {

return new Promise((resolve, reject) => {

iView.LoadingBar.start()

axios.get(url, config)

.then(data => {

resolve(data)

iView.LoadingBar.finish()

}).catch((error) => {

resolve()

iView.LoadingBar.error()

})

})

} else {

return new Promise((resolve, reject) => {

axios.get(url, config)

.then(data => {

resolve(data)

}).catch((error) => {

resolve()

})

})

}

}

3. 封装一个接口:

export default {

getList: (config) => getService(`/api/getList`, config)

}

4. main.js注册:

import service from '@/service'

Vue.prototype.$service = service

5.调用接口

async getList() {

// 1.使用await

// 第2步封装axios方法时,对于错误情况,即catch内:resolve();

// 所以这里不需要try···catch···来使用await;这里如果res不为空,说明是正确接收数据的情况

this.loading = true;

let res = await this.$service.getList({

pageNum: this.page.current,

pageSize: this.page.size

});

this.loading = false;

if (res) {

// 此种情况说明请求成功

} else {

// 请求错误的情况,一般不需要特殊处理,因为已经在全局设置了错误提示

}

},

getList2() {

// 2.使用then

// 第2步封装axios方法时,对于错误情况,即catch内:resolve();

// 所以这里then可以接收到正确和错误的结果,不需要再使用catch接受错误情况;这里如果res不为空,说明是正确接收数据的情况

this.loading = true;

this.$service

.getList({

pageNum: this.page.current,

pageSize: this.page.size

})

.then(res => {

this.loading = false;

if (res) {

// 此种情况说明请求成功

} else {

// 请求错误的情况,一般不需要特殊处理,因为已经在全局设置了错误提示

}

});

}

原文:https://www.cnblogs.com/XHappyness/p/11429526.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值