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学习笔录 简单的JQuery
Apr 09 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
jquery 中ajax执行的优先级
Jun 22 Javascript
javascript执行环境及作用域详解
May 05 Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 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 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
详解js类型判断
2018/05/22 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
ES6对象操作实例详解
2020/05/23 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python通过select实现异步IO的方法
2015/06/04 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python 默认参数相关知识详解
2019/09/18 Python
python实现批量文件重命名
2019/10/31 Python
学习python需要有编程基础吗
2020/06/02 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
北京奥运会口号
2014/06/21 职场文书
争做文明公民倡议书
2019/06/24 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers