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 传统事件模型构造的事件监听器实现代码
May 31 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
Jan 11 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
canvas绘制七巧板
Feb 03 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
Vue.js在数组中插入重复数据的实现代码
Nov 17 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
Vue export import 导入导出的多种方式与区别介绍
Feb 12 Javascript
支付宝小程序实现省市区三级联动
Jun 21 Javascript
vue实现在进行增删改操作后刷新页面
Aug 05 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
javascript常用对话框小集
2013/09/13 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
javascript实现微信分享
2014/12/23 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python打印“菱形”星号代码方法
2018/02/05 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
安全宣传标语口号
2014/06/06 职场文书
庆七一活动总结
2014/08/27 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2014年手术室工作总结
2014/11/26 职场文书