vue interceptors(拦截器)
拦截器 顾名思义: 就是半路个您劫持,
拦截器
其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西,
这时候 vue 中应用中axios的 interceptors 其的就能帮助我们做这些事情
拦截请求
比如需要在请求头里面加入 token和 签名 加强请求安全性。毕竟请求被攻击太多了
// 拦截请求
http.interceptors.request.use(config => {// 请求头添加access_token
const token = localStorage.getItem('TOKEN') ? JSON.parse(localStorage.getItem('TOKEN')) : ''
if (token && token.access_token ) {
config.headers['Access-Token'] = token.access_token.value
}
/*
* 处理post、put、delete请求
* 1、data为空时,默认传一个随机参数
* 2、根据data生成签名
* 3、转化data为查询参数格式
*/
if (config.method === 'post' || config.method === 'put' || config.method === 'delete') {
// 默认传一个数据
if (!config.data) {
config.data = {
t: new Date().getTime()
}
}
// 请求头添加签名
config.headers.Sign = util.createSign(config.data)
// 转化data数据格式
config.data = qs.stringify(config.data)
}
return config
}, error => {
Toast(error.message)
Indicator.close()
})
拦截响应
就去请求到数据了,做一些数据判断,比如没有注册之类的,可以跳转到用户注册页面。
也可以判断请求是的token 是否过期,给它重置。
// 拦截响应
http.interceptors.response.use(res => {
// 响应失败
if (!res.data.success) {
Toast(res.data.msg)
Indicator.close()
} /**
* refresh_token过期
* 1、清空本地token
* 2、刷新页面
*/
if (res.data.code === '004-1') {
localStorage.setItem('TOKEN', '')
window.location.reload()
} // 请先绑定手机号
if (res.data.code === '004-2') {
router.push({
name: 'bindMobile'
})
} return res.data
}, error => {
Toast(error.message)
Indicator.close()
})
请求错误
我一般都会在拦截和响应的 报错的 方法里面:加入自己写的组件比如
弹出框(错误消息)
还有就是那种 loading 的停止 动画 这不就完美了
可以结合 es6 中的 promise 来做请求 亦或是 es7 中的 async await,数据 来解决请求 回调地狱,
当然axios 中提供的 all 请求方式 让2个请求后才执行后面的操作,这样会跟方便,啧啧 ,简直了
下面是一些代码片段:
axios.all([api.getHomeList(), api.getshop()]).then(
axios.spread(function(acct, perms) {
// 两个请求现在都执行完成
//console.log(acct,perms)
})
);
真的感觉前端的变化太大了,快学不动了,还是加油加油吧。
vue interceptors(拦截器)的更多相关文章
- (vue.js)axios interceptors 拦截器中添加headers 属性
		(vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ... 
- vue axios拦截器 + 自编写插件 实现全局 loading 效果;
		项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ... 
- vue --- axios拦截器+form格式请求体
		在vue2.x中使用CLI生成的模板有很大改变,需要自己手动在main.ts同级目录下新建interceptors.ts interceptors.ts import axios from 'axio ... 
- vue axios 拦截器
		前言 项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断. 第一次使用拦截器,文章中如有不对的地方还请各位大佬帮忙指正谢谢. 正文 axios的拦截器分为 ... 
- flume1.8 Interceptors拦截器(五)
		1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ... 
- springMVC之mvc:interceptors拦截器的用法
		1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ... 
- vue  router拦截器的简单使用
		之前,为了实现router跳转的每个页面的url上都带上addressCode,然后用了一下router拦截器,很好用,当然也可以专门封装一个方法来实现(跳转的页面上带有addressCode),不过 ... 
- angular之interceptors拦截器
		<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UT ... 
- springMVC <mvc:interceptors>拦截器的使用
		首先在springMVC.xml配置如下代码 <!-- 拦截器 --> <mvc:interceptors> <bean class="com.base.Acc ... 
随机推荐
- 阶段3 2.Spring_08.面向切面编程 AOP_2 spring中的aop术语和细节
			基于接口的动态代理要求,要去被代理对象最少实现一个接口 基于子类的动态代理没有实现接口的要求.但是要求我们的被代理类不能是最终类 在Spring中可以选择基于接口还是子类的动态代理 术语 大白话.业务 ... 
- 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍
			1.完善我们的account案例 2.分析案例中问题 3.回顾之前讲过的一个技术:动态代理 4.动态代理另一种实现方式 5.解决案例中的问题 6.AOP的概念 7.spring中的AOP相关术语 8. ... 
- Python 解决八皇后问题
			问题介绍 八皇后问题是一个以国际象棋为背景的问题:如何能够在 \(8\times8\) 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一 ... 
- 【VS开发】循序渐进学习使用WINPCAP(一)
			winpcap教程 中文教程 http://www.ferrisxu.com/WinPcap/html/index.html 除此之外, WinPcap · Developer Resources下载 ... 
- mysql——多表——合并查询结果
			合并查询结果 合并查询结果 是将多个select语句的查询结果合并到一起 union关键字,数据库会将所有的查询结果合并到一起,然后除掉相同的记录: union all关键字,只是简单的合并到一起 前 ... 
- 用SelectSingleNode()方法查找xml节点一直返回null
			代码使用如下 XmlNode root = xmlDoc.SelectSingleNode("Project"); 返回的root一直是null 查了xml文件中确实是有Proje ... 
- ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
			MySQL版本5.6.35 在一个长度为512字符的字段上创建unique key报错 CREATE DATABASE dpcs_metadata DEFAULT CHARACTER SET utf8 ... 
- 【转贴】Linux查看物理CPU个数、核数、逻辑CPU个数
			https://www.cnblogs.com/sparkbj/p/7161675.html 记不住 sort uniq wc grep 等命令集合 # 总核数 = 物理CPU个数 X 每颗物理C ... 
- 插入数据库失败([Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version)
			报错信息如下: , ) 原因,read是数据库的关键字, 牢记,如果一个词是数据库的关键字,那么在写数据库语句的时候,这个词一定是蓝色的(关键字颜色)!! 
- python 利用 smtplib发邮件
			import smtplib from email.mime.text import MIMEText title = "request build error" content ... 
