Vue+axios 实现http拦截及路由拦截实例


Posted in Javascript onApril 25, 2017

现如今,每个前端对于Vue都不会陌生,Vue框架是如今最流行的前端框架之一,其势头直追react.最近我用vue做了一个项目,下面便是我从中取得的一点收获.

基于现在用vue+webpack搭建项目的文档已经有很多了,我就不再累述了.

技术栈

  1. vue2.0
  2. vue-router
  3. axios

拦截器

首先我们要明白设置拦截器的目的是什么,当我们需要统一处理http请求和响应时我们通过设置拦截器处理方便很多.

这个项目我引入了element ui框架,所以我是结合element中loading和message组件来处理的.我们可以单独建立一个http的js文件处理axios,再到main.js中引入.

/**
 * 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

这样我们就统一处理了http请求和响应的拦截.当然我们可以根据具体的业务要求更改拦截中的处理.

路由拦截

我们可以通过路由拦截做什么?我认为最主要的便是对权限的控制,比如有的页面需要登录了才能进入,有些页面不同身份渲染不同.接下来简单的讲一下登录拦截.

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

const router = new Router({
 routes: [
 {
  path: '/',
  /*
  * 按需加载 
  */
  component: (resolve) => {
  require(['../components/Home'], resolve)
  }
 }, {
  path: '/record',
  name: 'record',
  component: (resolve) => {
  require(['../components/Record'], resolve)
  }
 }, {
  path: '/Register',
  name: 'Register',
  component: (resolve) => {
  require(['../components/Register'], resolve)
  }
 }, {
  path: '/Luck',
  name: 'Luck', 
  // 需要登录才能进入的页面可以增加一个meta属性
  meta: { 
  requireAuth: true
  },
  component: (resolve) => {
  require(['../components/luck28/Luck'], resolve)
  }
 }
 ]
})
// 判断是否需要登录权限 以及是否登录
router.beforeEach((to, from, next) => {
 if (to.matched.some(res => res.meta.requireAuth)) {// 判断是否需要登录权限
 if (localStorage.getItem('username')) {// 判断是否登录
  next()
 } else {// 没登录则跳转到登录界面
  next({
  path: '/Register',
  query: {redirect: to.fullPath}
  })
 }
 } else {
 next()
 }
})

export default router

这样就做好了登录拦截.我们只需在main.js中引入router就可以了.

实现权限的控制我们还可以通过Vuex来实现,但是如果是小型项目就没必要引入Vuex了.

以上是我做项目过程中的一些收获,由于入Vue的坑也才两月不到,有些地方可能有不足之处,欢迎大家指正,我会悉心听取.也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
基于JQuery的列表拖动排序实现代码
Oct 01 Javascript
用原生js做个简单的滑动效果的回到顶部
Oct 15 Javascript
jQuery层级选择器用法分析
Feb 10 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 Javascript
Bootstrap Scrollspy源码学习
Mar 02 Javascript
js实现五星评价功能
Mar 08 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
JavaScript数组_动力节点Java学院整理
Jun 26 Javascript
微信小程序开发之左右分栏效果的实例代码
May 20 Javascript
手把手教你实现 Promise的使用方法
Sep 02 Javascript
JavaScript 判断数据类型的4种方法
Sep 11 Javascript
vuejs如何配置less
Apr 25 #Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 #Javascript
微信小程序中显示html格式内容的方法
Apr 25 #Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 #Javascript
详解Vue 动态添加模板的几种方法
Apr 25 #Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 #Javascript
基于Vue实现timepicker
Apr 25 #Javascript
You might like
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php 设计模式之 单例模式
2008/12/19 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
asp批量修改记录的代码
2008/06/25 Javascript
javascript cookies操作集合
2010/04/12 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python如何在终端里面显示一张图片
2016/08/17 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
python实现可变变量名方法详解
2019/07/01 Python
10款最好的Python开发编辑器
2019/07/03 Python
python代码区分大小写吗
2020/06/17 Python
简约控的天堂:The Undone
2016/12/21 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
幼儿园元旦家长感言
2014/02/27 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
PHP命令行与定时任务
2021/04/01 PHP
浅析NIO系列之TCP
2021/06/15 Java/Android
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技