目前想出的处理接口请求进行全局错误提示 的最佳方案,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 {
// 请求错误的情况,一般不需要特殊处理,因为已经在全局设置了错误提示
}
});
}

axios拦截设置和错误处理的更多相关文章

  1. vue使用jsx/axios拦截器设置

    最害怕的就是做过的事情,转几天又忘记了:写过的代码,也模模糊糊不知道哪里去了,所以告诉自己最好把每天遇到的问题记录下来,好,开始. 新公司要搭个vue后台框架,所以用了简简单单的 vue+iview+ ...

  2. vue中 请求拦截 响应拦截设置

    第一,在项目的src中新建http.js文件,将以下代码复制进去 import axios from 'axios' import { Message, Loading } from 'element ...

  3. axios拦截器的使用方法

    很多时候我们需要在发送请求和响应数据的时候做一些页面处理,比如在请求服务器之前先判断以下用户是登录(通过token判断),或者设置请求头header,或者在请求到数据之前页面显示loading等等,还 ...

  4. 12. 前后端联调 + ( proxy代理 ) + ( axios拦截器 ) + ( css Modules模块化方案 ) + ( css-loader ) + ( 非路由组件如何使用history ) + ( bodyParser,cookieParser中间件 ) + ( utility MD5加密库 ) + ( nodemon自动重启node ) + +

    (1) proxy 前端的端口在:localhost:3000后端的端口在:localhost:1234所以要在webpack中配置proxy选项 (proxy是代理的意思) 在package.jso ...

  5. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装

    1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ...

  6. vue axios拦截器 + 自编写插件 实现全局 loading 效果;

    项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...

  7. Vue学习手记09-mock与axios拦截的使用

    01.安装 安装mock npm install mockjs 安装axios npm install axios 02.新建一个config.js文件做axios拦截 import axios fr ...

  8. Vue基于vuex、axios拦截器实现loading效果及axios的安装配置

    准备 利用vue-cli脚手架创建项目 进入项目安装vuex.axios(npm install vuex,npm install axios) axios配置 项目中安装axios模块(npm in ...

  9. vue导航守卫和axios拦截器的区别

    在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器. 一.什么是导航守卫? vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.(在路由跳转时 ...

随机推荐

  1. tab切换中的滚动条下拉分页带来的问题

    相信做过tab切换中滚动条下拉分页的童鞋都知道,我们在用scroll方法来做滚动条下拉分页的时候,都是有bug,切换中间的内容会互相影响,为了解决这个问题,我总结了2种方法: 1.方法一: <! ...

  2. 七、单例设计模式共享数据分析、解决、call_once

    一.设计模式大概谈 代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管.阅读代码很痛苦. 用设计模式理念写出来的代码很晦涩.<< head first>&g ...

  3. iOS 获取全局唯一标示符

    这个方法用来产生一个唯一的标示符,每次调用都会不一样,所以可以用当作一些临时缓存文件的名字 NSString *identifier = [[NSProcessInfo processInfo] gl ...

  4. Gym-100676E Time Limit Exceeded?

    原题链接 https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1491063604 ********************* ...

  5. JumpServer堡垒机安装笔记

    厂商文档--一步一步安装CentOS(https://jumpserver.readthedocs.io/zh/master/setup_by_centos.html) 厂商文档--简单优化(http ...

  6. [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being

    [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent c ...

  7. java多线程学习笔记(七)

    volatile关键字 关键字volatile的主要作用是使变量在多个线程间可见. public class PrintString { private boolean isContinue = tr ...

  8. C语言|博客作业5

    ---恢复内容开始--- 一.本周教学内容&目标 第2章 用C语言编写程序-函数 2.5 生成乘方表与阶乘表.使学生对函数的定义和调用有初步的认识,能模仿编程. 二.本周作业头 问题 答案 这 ...

  9. Uncaught (in promise) DOMException谷歌浏览器js报错分析

    Chrome的自动播放的政策在2018年4月做了更改,这点在开源中国的这篇文章中也有说到. 新的行为:浏览器为了提高用户体验,减少数据消耗,现在都在遵循autoplay政策,Chrome的autopl ...

  10. vscode中git的配置

    vscode中对git进行了集成,很多操作只需点击就能操作,无需写一些 git 指令. 不过这就需要你对vscode进行配置.下面我会讲到 git 的配置与免密码上传 github VSCode配置g ...