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 相关文章推荐
JS加ASP二级域名转向的代码
May 17 Javascript
js 小贴士一星期合集
Apr 07 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
May 19 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 Javascript
初学node.js中实现删除用户路由
May 27 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 21 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的计数器程序
2006/10/09 PHP
php使用GeoIP库实例
2014/06/27 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
JS location几个方法小姐
2008/07/09 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
详解Python发送email的三种方式
2018/10/18 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
个人近期表现材料
2014/02/11 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
个人银行贷款担保书
2014/04/01 职场文书
房产委托公证书样本
2014/04/04 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技