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 validation插件表单验证的一个例子
Mar 03 Javascript
在Windows上安装Node.js模块的方法
Sep 25 Javascript
jquery制作select列表双向选择示例代码
Sep 02 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
用AngularJS来实现监察表单按钮的禁用效果
Nov 02 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
jQuery实现联动下拉列表查询框
Jan 04 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
Apr 13 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
swiper实现异形轮播效果
Nov 28 Javascript
JS原形与原型链深入详解
May 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写的简易聊天室代码
2011/06/04 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript中的其他对象
2008/01/16 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JS作用域深度解析
2016/12/29 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
Django封装交互接口代码
2020/07/12 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
小学英语教学反思
2014/01/30 职场文书
ktv好的活动方案
2014/08/15 职场文书
个性发展自我评价2015
2015/03/09 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android