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在IE中“意外地调用了方法或属性访问”
Nov 19 Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
jQuery使用addClass()方法给元素添加多个class样式
Mar 26 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
jQuery点击其他地方时菜单消失的实现方法
Apr 22 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
JS button按钮实现submit按钮提交效果
Nov 01 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
layui输入框只允许输入中文且判断长度的例子
Sep 18 Javascript
微信小程序 冒泡事件原理解析
Sep 27 Javascript
详解JavaScript中的链式调用
Nov 27 Javascript
在JavaScript中如何使用宏详解
May 06 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 分库分表hash算法
2009/11/12 PHP
php类常量用法实例分析
2015/07/09 PHP
ThinkPHP安装和设置
2015/07/27 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
Python函数参数类型*、**的区别
2015/04/11 Python
初步解析Python下的多进程编程
2015/04/28 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
python感知机实现代码
2019/01/18 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
党员廉洁自律个人总结
2015/02/13 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
紧急迫降观后感
2015/06/15 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
Mysql忘记密码解决方法
2022/02/12 MySQL