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编码之encodeURIComponent使用介绍(asp,php)
Mar 01 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
javascript搜索框效果实现方法
May 14 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
JavaScript中数据类型转换总结
Dec 25 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
还不懂递归?读完这篇文章保证你会懂
Jul 29 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数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
javascript代码加载优化方法
2011/01/30 Javascript
JS常用函数使用指南
2014/11/23 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
Python中的装饰器用法详解
2015/01/14 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
python中的colorlog库使用详解
2019/07/05 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
python lambda的使用详解
2021/02/26 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
Hotels.com南非:酒店预订
2017/11/02 全球购物
勤俭节约倡议书
2014/04/14 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
详解Java实践之建造者模式
2021/06/18 Java/Android