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 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
javascript之Partial Application学习
Jan 10 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
JS实现一个简单的日历
Feb 22 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
JavaScript定义函数的三种实现方法
Sep 23 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 Javascript
html5 录制mp3音频支持采样率和比特率设置
Jul 15 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 include_path设置技巧分享
2011/07/03 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
JavaScript对象的property属性详解
2014/04/01 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
python解析文件示例
2014/01/23 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Python实现最常见加密方式详解
2019/07/13 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
小学见习报告
2015/06/23 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
2015中学教学工作总结
2015/07/22 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书