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 相关文章推荐
pjblog中的UBBCode.js
Apr 25 Javascript
一组JS创建和操作表格的函数集合
May 07 Javascript
Javascript 作用域使用说明
Aug 13 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
基于javascript实现图片懒加载
Jan 05 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
javascript设计模式之迭代器模式
Jan 30 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 Javascript
JSON stringify方法原理及实例解析
Oct 23 Javascript
处理canvas绘制图片模糊问题
May 11 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
mysql5详细安装教程
2007/01/15 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python数据类型之List列表实例详解
2019/05/08 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
某公司面试题
2012/03/05 面试题
劳动实践课感言
2014/02/01 职场文书
投资意向书范本
2014/04/01 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
中学生自我评价范文
2015/03/03 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
python基础入门之字典和集合
2021/06/13 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript