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 相关文章推荐
百度留言本js 大家可以参考下
Oct 13 Javascript
在模板页面的js使用办法
Apr 01 Javascript
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
php中给js数组赋值方法
Mar 10 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
JS判断浏览器是否安装flash插件的简单方法
Sep 13 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
Node.js中的cluster模块深入解读
Jun 11 Javascript
构建大型 Vue.js 项目的10条建议(小结)
Nov 14 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python处理大数字的方法
2015/05/27 Python
Python排序算法实例代码
2017/08/10 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
暑期工社会实践报告
2015/07/13 职场文书
oracle索引总结
2021/09/25 Oracle