博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ Vue ] 网络请求之 interceptors 实际应用
阅读量:6226 次
发布时间:2019-06-21

本文共 1623 字,大约阅读时间需要 5 分钟。

项目背景

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

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

需求分析

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

功能实现

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

  1. 安装axios, 这里我们就赘述怎么安装axios.
  2. main.js 注册 axios
Vue.use(Vuex)Vue.use(VueAxios, axios)Vue.use(qs)
注:
qs,使用axios,必须得安装 qs,所有的Post 请求,我们都需要 qs,对参数进行序列化。
  1. 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)  })
  1. 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)  })

转载地址:http://osxna.baihongyu.com/

你可能感兴趣的文章
浅谈linux读写同步机制RCU
查看>>
三层架构设计理念
查看>>
spring的@Transactional
查看>>
java 中生成随机验证码
查看>>
计划任务启动停止控制台程序
查看>>
04-单表查询
查看>>
[ZJOI2006]皇帝的烦恼
查看>>
HTML5简介
查看>>
Read All About It-Attraction舞团
查看>>
[摘录]第1章 开局谈判技巧
查看>>
as 运算符
查看>>
基本数据类型对象包装类
查看>>
1178:成绩排序
查看>>
php总结8——mysql函数库、增删改
查看>>
20170914-构建之法:现代软件工程-阅读笔记
查看>>
HDU5616 天平能否称出物体重量问题 01背包变形或者折半搜索
查看>>
关于group by 两个或以上条件的分析
查看>>
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
查看>>
二分法详解
查看>>
Chisel3 - Tutorial - Functionality
查看>>