拦截器 顾名思义: 就是半路个您劫持,

拦截器

其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西,

这时候 vue 中应用中axios的 interceptors 其的就能帮助我们做这些事情

拦截请求

比如需要在请求头里面加入 token和 签名    加强请求安全性。毕竟请求被攻击太多了

  1. // 拦截请求
  2. http.interceptors.request.use(config => {// 请求头添加access_token
  3. const token = localStorage.getItem('TOKEN') ? JSON.parse(localStorage.getItem('TOKEN')) : ''
  4. if (token && token.access_token ) {
  5. config.headers['Access-Token'] = token.access_token.value
  6. }
  7. /*
  8. * 处理post、put、delete请求
  9. * 1、data为空时,默认传一个随机参数
  10. * 2、根据data生成签名
  11. * 3、转化data为查询参数格式
  12. */
  13. if (config.method === 'post' || config.method === 'put' || config.method === 'delete') {
  14. // 默认传一个数据
  15. if (!config.data) {
  16. config.data = {
  17. t: new Date().getTime()
  18. }
  19. }
  20. // 请求头添加签名
  21. config.headers.Sign = util.createSign(config.data)
  22. // 转化data数据格式
  23. config.data = qs.stringify(config.data)
  24. }
  25. return config
  26. }, error => {
  27. Toast(error.message)
  28. Indicator.close()
  29. })

拦截响应

就去请求到数据了,做一些数据判断,比如没有注册之类的,可以跳转到用户注册页面。

也可以判断请求是的token 是否过期,给它重置。

  1. // 拦截响应
  2. http.interceptors.response.use(res => {
  3. // 响应失败
  4. if (!res.data.success) {
  5. Toast(res.data.msg)
  6. Indicator.close()
  7. }
  8.  
  9. /**
  10. * refresh_token过期
  11. * 1、清空本地token
  12. * 2、刷新页面
  13. */
  14. if (res.data.code === '004-1') {
  15. localStorage.setItem('TOKEN', '')
  16. window.location.reload()
  17. }
  18.  
  19. // 请先绑定手机号
  20. if (res.data.code === '004-2') {
  21. router.push({
  22. name: 'bindMobile'
  23. })
  24. }
  25.  
  26. return res.data
  27. }, error => {
  28. Toast(error.message)
  29. Indicator.close()
  30. })

请求错误

我一般都会在拦截和响应的 报错的 方法里面:加入自己写的组件比如

弹出框(错误消息)

还有就是那种 loading 的停止 动画 这不就完美了

可以结合 es6 中的 promise 来做请求 亦或是 es7 中的 async await,数据 来解决请求 回调地狱,

当然axios 中提供的 all 请求方式 让2个请求后才执行后面的操作,这样会跟方便,啧啧 ,简直了

下面是一些代码片段:

  1. axios.all([api.getHomeList(), api.getshop()]).then(
  2. axios.spread(function(acct, perms) {
  3. // 两个请求现在都执行完成
  4. //console.log(acct,perms)
  5. })
  6. );

真的感觉前端的变化太大了,快学不动了,还是加油加油吧。

vue interceptors(拦截器)的更多相关文章

  1. (vue.js)axios interceptors 拦截器中添加headers 属性

    (vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...

  2. vue axios拦截器 + 自编写插件 实现全局 loading 效果;

    项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...

  3. vue --- axios拦截器+form格式请求体

    在vue2.x中使用CLI生成的模板有很大改变,需要自己手动在main.ts同级目录下新建interceptors.ts interceptors.ts import axios from 'axio ...

  4. vue axios 拦截器

    前言 项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断. 第一次使用拦截器,文章中如有不对的地方还请各位大佬帮忙指正谢谢. 正文 axios的拦截器分为 ...

  5. flume1.8 Interceptors拦截器(五)

    1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...

  6. springMVC之mvc:interceptors拦截器的用法

    1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...

  7. vue router拦截器的简单使用

    之前,为了实现router跳转的每个页面的url上都带上addressCode,然后用了一下router拦截器,很好用,当然也可以专门封装一个方法来实现(跳转的页面上带有addressCode),不过 ...

  8. angular之interceptors拦截器

    <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UT ...

  9. springMVC <mvc:interceptors>拦截器的使用

    首先在springMVC.xml配置如下代码 <!-- 拦截器 --> <mvc:interceptors> <bean class="com.base.Acc ...

随机推荐

  1. 项目中使token

    项目中使token 如果项目架构采用前后端分离,并采用分布式架构,通过定义接口API,与前端进行数据交互,前端通过html前行实现.若加入移动端(Andriod,ios)实现,可直接使用API接口实现 ...

  2. Pycharm最新激活码汇总,pycharm2019激活码

    Pycharm激活码汇总 激活过程如下: 1.双击运行桌面上的Pycharm图标,进入下图界面,选择Do not import settings,之后选择OK,进入下一步. 2.拖动到底部,选择Acc ...

  3. CentOS 7 卸载 mysql

    查看是否安装 mysql rpm -qa | grep -i mysql yum list install mysql* 卸载 yum方式 yum remove mysql mysql-server ...

  4. python 并发编程 io模型 目录

    python 并发编程 IO模型介绍 python 并发编程 socket 服务端 客户端 阻塞io行为 python 并发编程 阻塞IO模型 python 并发编程 非阻塞IO模型 python 并 ...

  5. 听说这样可以加快oracle入表速度

    oracle 用occi编程的时候,批量提交使用绑定变量的方式,主要瓶颈再sql语句解析上,改成merge into后效率没有变化,但是使用绑定变量方法,能加快速度

  6. pandas中数据结构-Series

    pandas中数据结构-Series pandas简介 Pandas是一个开源的,BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具.Python与Pan ...

  7. Spring jar包详解(转)

    spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-moc ...

  8. phpstorm配置phpunit进行单元测试

    1.配置单元测试目录: (1)autoload.php <?php function autoloader($dir){ spl_autoload_register(function($name ...

  9. ActiveMQ消息过滤

    前言 ActiveMQ提供了一种机制,使用它,消息服务可根据消息选择器中的标准来执行消息过滤.生产者可在消息中放入应用程序特有的属性,而消费者可使用基于这些属性的选择标准来表明对消息是否感兴趣.这就简 ...

  10. CentOS7下载与安装错误全记录

    这篇文章记录安装CentOS7过程错误全记录,供大家和自己参考 起因:笔记本用的win10系统,开启热点的时候,总是10分钟就自动关闭.于是折腾linux系统,平时用win10系统,也切换到linux ...