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 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
实例教学如何写vue插件
Nov 30 Javascript
解决vue-cli + webpack 新建项目出错的问题
Mar 20 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
Dec 22 Javascript
vue-resource post数据时碰到Django csrf问题的解决
Mar 13 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 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变量引用的面试题
2010/08/08 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
用于table内容排序
2006/07/21 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
python实现画圆功能
2018/01/25 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
项目专员岗位职责
2013/12/04 职场文书
机电一体化自荐信
2013/12/10 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
六五普法规划实施方案
2014/03/21 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
医院保洁员管理制度
2015/08/05 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript