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 相关文章推荐
JavaScript Sort 表格排序
Oct 31 Javascript
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
深入探寻javascript定时器
Jan 02 Javascript
js两种拼接字符串的简单方法(必看)
Sep 02 Javascript
清除js缓存的多种方法总结
Dec 09 Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 Javascript
js使用highlight.js高亮你的代码
Aug 18 Javascript
React-native桥接Android原生开发详解
Jan 17 Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
Sep 16 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
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
js实现验证码功能
2020/07/24 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python实现将Excel转换为json的方法示例
2017/08/05 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python读取Kafka实例
2019/12/23 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
港湾网络笔试题
2014/04/19 面试题
初中三好学生事迹材料
2014/01/13 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
大学生简短的自我评价
2014/09/12 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android
MySQL如何使备份得数据保持一致
2022/05/02 MySQL
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL