axios拦截设置和错误处理方法


Posted in Javascript onMarch 05, 2018

现在vue的官方包已经不更新vue-resource了,转而推荐axios,下面是项目实战是总结的axios插件设置:

/**
 * @file Axios的Vue插件(添加全局请求/响应拦截器)
 */
// https://github.com/mzabriskie/axios
import axios from 'axios'
// 拦截request,设置全局请求为ajax请求
axios.interceptors.request.use((config) => {
 config.headers['X-Requested-With'] = 'XMLHttpRequest'
 return config
})
// 拦截响应response,并做一些错误处理
axios.interceptors.response.use((response) => {
 const data = response.data
// 根据返回的code值来做不同的处理(和后端约定)
 switch (data.code) {
 case '0':
  // 举例
  // exp: 修复iPhone 6+ 微信点击返回出现页面空白的问题
  if (isIOS()) {
  // 异步以保证数据已渲染到页面上
  setTimeout(() => {
   // 通过滚动强制浏览器进行页面重绘
   document.body.scrollTop += 1
  }, 0)
  }
  // 这一步保证数据返回,如果没有return则会走接下来的代码,不是未登录就是报错
  return data
 // 需要重新登录
 case 'SHIRO_E5001':
  // 微信生产环境下授权登录
  if (isWeChat() && IS_PRODUCTION) {
  axios.get(apis.common.wechat.authorizeUrl).then(({ result }) => {
   location.replace(global.decodeURIComponent(result))
  })
  } else {
  // 否则跳转到h5登录并带上跳转路由
  const search = encodeSearchParams({
   next: location.href,
  })
  location.replace(`/user/login?${search}`)
  }
  // 不显示提示消息
  data.description = ''
  break
 default:
 }
 // 若不是正确的返回code,且已经登录,就抛出错误
 const err = new Error(data.description)
 err.data = data
 err.response = response
 throw err
}, (err) => { // 这里是返回状态码不为200时候的错误处理
 if (err && err.response) {
 switch (err.response.status) {
  case 400:
  err.message = '请求错误'
  break
  case 401:
  err.message = '未授权,请登录'
  break
  case 403:
  err.message = '拒绝访问'
  break
  case 404:
  err.message = `请求地址出错: ${err.response.config.url}`
  break
  case 408:
  err.message = '请求超时'
  break
  case 500:
  err.message = '服务器内部错误'
  break
  case 501:
  err.message = '服务未实现'
  break
  case 502:
  err.message = '网关错误'
  break
  case 503:
  err.message = '服务不可用'
  break
  case 504:
  err.message = '网关超时'
  break
  case 505:
  err.message = 'HTTP版本不受支持'
  break
  default:
 }
 }
 return Promise.reject(err)
})
axios.install = (Vue) => {
 Vue.prototype.$axios = axios
}
export default axios

以上这篇axios拦截设置和错误处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
jQuery的css()方法用法实例
Dec 24 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
js模糊查询实例分享
Dec 26 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
简单快速的实现js计算器功能
Aug 17 Javascript
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
完美解决axios在ie下的兼容性问题
Mar 05 #Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 #Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 #Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 #Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 #Javascript
vue项目中使用ueditor的实例讲解
Mar 05 #Javascript
快速处理vue渲染前的显示问题
Mar 05 #Javascript
You might like
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
JavaScript实现拼音排序的方法
2012/11/20 Javascript
JavaScript函数详解
2015/02/27 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
python进阶教程之动态类型详解
2014/08/30 Python
Python创建模块及模块导入的方法
2015/05/27 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Python socket服务常用操作代码实例
2020/06/22 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
软件测试有哪些?什么是配置项?
2012/02/12 面试题
麦当劳辞职信范文
2014/01/18 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
化妆品店促销方案
2014/02/24 职场文书
班级活动总结格式
2014/08/30 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
如何利用python实现列表嵌套字典取值
2022/06/10 Python