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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 Javascript
提取jquery的ready()方法单独使用示例
Mar 25 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 Javascript
javascript如何实现create方法
Nov 04 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
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
Javascript Object.extend
2010/05/18 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python字典get()方法用法分析
2015/04/17 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python随机数random模块使用指南
2016/09/09 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Python如何解除一个装饰器
2020/08/07 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
班组建设经验交流材料
2014/05/12 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
廉洁自律个人总结
2015/02/14 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫