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对数字的格式化使用说明
Jan 12 Javascript
js内置对象 学习笔记
Aug 01 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
Nov 14 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
JavaScript获取一个范围内日期的方法
Apr 24 Javascript
JavaScript笔记之数据属性和存储器属性
Mar 31 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
详解如何配置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中call_user_func_array()函数的用法演示
2012/02/05 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
大三在校生电子商务求职信
2013/10/29 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
幼师个人总结范文
2015/02/28 职场文书
证券区域经理岗位职责
2015/04/10 职场文书