浅谈Vue网络请求之interceptors实际应用


Posted in Javascript onFebruary 28, 2018

项目背景

最近在项目开发中,遇到下面这样一个问题:

  1. 在进行铭感操作之前,每个请求需要携带token,但是token 有有效期,token 失效后需要换取新的token并继续请求。

需求分析

  1. 每个请求都需要携带 token ,所以我们可以使用 axios request 拦截器,在这里,我们给每个请求都加 token,这样就可以节省每个请求再一次次的复制粘贴代码。
  2. token 失效问题,当我们token 失效,我们服务端会返回一个特定的错误表示,比如 token invalid,但是我们不能在每个请求之后去做刷新 token 的操作呀,所以这里我们就用 axios response 拦截器,我们统一处理所有请求成功之后响应过来的数据,然后对特殊数据进行处理,其他的正常分发。

功能实现

分析完问题后,我们来实现功能

安装axios, 这里我们就赘述怎么安装axios.

在 main.js 注册 axios

Vue.use(Vuex)
Vue.use(VueAxios, axios)
Vue.use(qs)

注:qs,使用axios,必须得安装 qs,所有的Post 请求,我们都需要 qs,对参数进行序列化。

在 request 拦截器实现

axios.interceptors.request.use(
 config => {
  config.baseURL = '/api/'
  config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
  config.timeout = 2500
  let token = sessionStorage.getItem('access_token')
  let csrf = store.getters.csrf
  if (token) {
   config.headers = {
    'access-token': token,
    'Content-Type': 'application/x-www-form-urlencoded'
   }
  }
  if (config.url === 'refresh') {
   config.headers = {
    'refresh-token': sessionStorage.getItem('refresh_token'),
    'Content-Type': 'application/x-www-form-urlencoded'
   }
  }
  return config
 },
 error => {
  return Promise.reject(error)
 }
)

在 response 拦截器实现

axios.interceptors.response.use(
 response => {
  // 定时刷新access-token
  if (!response.data.value && response.data.data.message === 'token invalid') {
   // 刷新token
   store.dispatch('refresh').then(response => {
    sessionStorage.setItem('access_token', response.data)
   }).catch(error => {
    throw new Error('token刷新' + error)
   })
  }
  return response
 },
 error => {
  return Promise.reject(error)
 }
)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
jquery获取div宽度的实现思路与代码
Jan 13 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
Jun 20 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
javascript设计模式之装饰者模式
Jan 30 Javascript
小程序使用分包的示例代码
Mar 23 Javascript
Node.js中DNS模块学习总结
Feb 28 #Javascript
Vue自定义指令实现checkbox全选功能的方法
Feb 28 #Javascript
如何在vue中使用ts的示例代码
Feb 28 #Javascript
angularjs select 赋值 ng-options配置方法
Feb 28 #Javascript
select获取下拉框的值 下拉框默认选中方法
Feb 28 #Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 #Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 #Javascript
You might like
source.php查看源文件
2006/12/09 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
彻底理解Python中的yield关键字
2019/04/01 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
大足石刻导游词
2015/02/02 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书