vue+axios 前端实现的常用拦截的代码示例


Posted in Javascript onAugust 23, 2018

Axios拦截器配置

main.js

//定义一个请求拦截器
Axios.interceptors.request.use(function(config){
 store.state.isShow=true; //在请求发出之前进行一些操作
 return config
})
//定义一个响应拦截器
Axios.interceptors.response.use(function(config){
 store.state.isShow=false;//在这里对返回的数据进行处理
 return config
})

分别定义一个请求拦截器(请求开始时执行某些操作)、响应拦截器(接受到数据后执行某些操作),之间分别设置拦截时执行的操作,改变state内isShow的布尔值从而控制loading组件在触发请求数据开始时显示loading,返回数据时隐藏loading
特别注意:这里有一个语法坑(我可是来来回回踩了不少次)main.js中调取、操作vuex state中的数据不同于组件中的this.$store.state,而是直接store.state 同上面代码

一、路由拦截使用

router.beforeEach((to, from, next) => {
 if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
  if (store.state.token) { // 通过vuex state获取当前的token是否存在
   next();
  }
  else {
   next({
    path: '/login',
    query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
   })
  }
 }
 else {
  next();
 }
})

二、拦截器使用

要想统一处理所有http请求和响应,就得用上 axios 的拦截器。通过配置http response inteceptor,当后端接口返回401 Unauthorized(未授权),让用户重新登录。

// http request 拦截器
axios.interceptors.request.use(
 config => {
  if (store.state.token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
   config.headers.Authorization = `token ${store.state.token}`;
  }
  return config;
 },
 err => {
  return Promise.reject(err);
 });
 
// http response 拦截器
axios.interceptors.response.use(
 response => {
  return response;
 },
 error => {
  if (error.response) {
   switch (error.response.status) {
    case 401:
     // 返回 401 清除token信息并跳转到登录页面
     store.commit(types.LOGOUT);
     router.replace({
      path: 'login',
      query: {redirect: router.currentRoute.fullPath}
     })
   }
  }
  return Promise.reject(error.response.data) // 返回接口返回的错误信息
 });

三、实例

/**
 * http配置
 */
// 引入axios以及element ui中的loading和message组件
import axios from 'axios'
import { Loading, Message } from 'element-ui'
// 超时时间
axios.defaults.timeout = 5000
// http请求拦截器
var loadinginstace
axios.interceptors.request.use(config => {
 // element ui Loading方法
 loadinginstace = Loading.service({ fullscreen: true })
 return config
}, error => {
 loadinginstace.close()
 Message.error({
 message: '加载超时'
 })
 return Promise.reject(error)
})
// http响应拦截器
axios.interceptors.response.use(data => {// 响应成功关闭loading
 loadinginstace.close()
 return data
}, error => {
 loadinginstace.close()
 Message.error({
 message: '加载失败'
 })
 return Promise.reject(error)
})
 
export default axios

 如果你是使用了vux,那么在main.js这样使用:

Vue.prototype.$http.interceptors.response.use()

参考地址:vue中axios解决跨域问题和拦截器使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js滚动条回到顶部的代码
Dec 06 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
javascript继承机制实例详解
Nov 20 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
JavaScript实现刷新不重记的倒计时
Aug 10 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
Vue之Watcher源码解析(2)
Jul 19 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
Nov 15 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
Apr 25 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 #Javascript
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 #Javascript
React key值的作用和使用详解
Aug 23 #Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 #Javascript
从零开始学习搭建React脚手架项目
Aug 23 #Javascript
angular2 ng2-file-upload上传示例代码
Aug 23 #Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 #Javascript
You might like
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python是编译运行的验证方法
2015/01/30 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
求职信模版
2013/11/30 职场文书
单位委托书范本
2014/04/04 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
交通安全月活动总结
2015/05/08 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书