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通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
Sep 10 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
解决vue-router中的query动态传参问题
Mar 20 Javascript
深入理解JavaScript和TypeScript中的class
Apr 22 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
layer提示框添加多个按钮选择的实例
Sep 12 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP 实例化类的一点摘记
2008/03/23 PHP
跟我学Laravel之路由
2014/10/15 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
微信小程序实现底部导航
2018/11/05 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
大学三年的自我评价
2013/12/25 职场文书
七一表彰活动方案
2014/01/18 职场文书
两只小狮子教学反思
2014/02/05 职场文书
小学生检讨书大全
2014/02/06 职场文书
财产公证书样本
2014/04/04 职场文书
我的理想演讲稿
2014/04/30 职场文书
学习党章的体会
2014/11/07 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android