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 相关文章推荐
setInterval 和 setTimeout会产生内存溢出
Feb 15 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
angularjs实现table增加tr的方法
Feb 27 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 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脚本的10个技巧(4)
2006/10/09 PHP
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php 字符串替换的方法
2012/01/10 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
Python爬取APP下载链接的实现方法
2016/09/30 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
Python实现Linux监控的方法
2019/05/16 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
对Django中内置的User模型实例详解
2019/08/16 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
同学聚会欢迎辞
2014/01/14 职场文书
工作自我评价怎么写
2014/01/29 职场文书
《三峡》教学反思
2014/03/01 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
mysql查看表结构的三种方法总结
2022/07/07 MySQL