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 parseInt("08")未指定进位制问题
Jun 19 Javascript
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
javascript判断并获取注册表中可信任站点的方法
Jun 01 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
JS实现复制内容到剪贴板功能
Feb 05 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
jQuery实现飞机大战小游戏
Jul 05 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 循环列出目录内容的函数代码
2010/05/26 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
常用DOM整理
2015/06/16 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
python 快速排序代码
2009/11/23 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
用django设置session过期时间的方法解析
2019/08/05 Python
使用Python实现牛顿法求极值
2020/02/10 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
python同时遍历两个list用法说明
2020/05/02 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
2015年化验员工作总结
2015/04/10 职场文书
工作经历证明范本
2015/06/15 职场文书
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers