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的滑动样例代码
Nov 20 Javascript
制作jquery遮罩层效果导航菜单代码分享
Dec 25 Javascript
node.js中格式化数字增加千位符的几种方法
Jul 03 Javascript
文字垂直滚动之javascript代码
Jul 29 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
js 调用百度分享功能
Feb 27 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
vue分页插件的使用方法
Dec 25 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
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游戏编程25个脚本代码
2011/02/08 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
JavaScript的目的分析
2007/01/05 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
python爬虫框架talonspider简单介绍
2017/06/09 Python
基于python 字符编码的理解
2017/09/02 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python实现多进程的四种方式
2019/02/22 Python
Python匿名函数及应用示例
2019/04/09 Python
python实现低通滤波器代码
2020/02/26 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
学生党员的自我评价范文
2014/03/01 职场文书
信息管理专业自荐书
2014/06/05 职场文书
股指期货心得体会
2014/09/13 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
前台文员岗位职责
2015/02/04 职场文书
2019年大学推荐信
2019/06/24 职场文书
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python