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中Date日期函数中的参数使用介绍
Jan 02 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
Jan 13 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
JavaScript中return用法示例
Nov 29 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
ES6学习笔记之map、set与数组、对象的对比
Mar 01 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
javascript中的with语句学习笔记及用法
Feb 17 Javascript
JS数组方法reduce的用法实例分析
Mar 03 Javascript
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
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
Protoss兵种介绍
2020/03/14 星际争霸
如何用PHP实现插入排序?
2013/04/10 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
python实现图片九宫格分割
2021/03/07 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
国贸专业个人求职信范文
2014/01/08 职场文书
医院标语大全
2014/06/23 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书