Angular8 Http拦截器简单使用教程


Posted in Javascript onAugust 20, 2019

拦截器

Http拦截器就是拦截发出的请求,对其进行统一添加额外处理,然后放行;对响应进行拦截并作出业务上的判断,决定是否给与返回。

先看一组常见的业务请求:

this.http.post('http://127.0.0.1:8080/api/getList', {
   header: {
    token: 'asdasdas'
   },
   observe: 'body',
   params: {
    pageSize: 10,
    pageIndex: 1
   },
   responseType: 'json',
   withCredentials: true
  });

可以看出有些配置是几乎所有请求都共通得,有的需要token等参数,一个项目全部手动写得话,第一容易漏写,第二以后如果有改动,需要所有接口都调整,不利于维护,最理想得状态就是只修改参数和api地址,其他得交给特别得机制去处理,这就引出了今天的主角-HttpInterceptor

定义拦截器

按照官方约定,文件应该是以‘.interceptor.ts'作为后缀

import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
const ignoreToken = ['login', 'logout', 'table'];
@Injectable()
export class CommonInterceptor implements HttpInterceptor {
 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  // 先补全请求协议
  let url = req.url;
  const needToken = ignoreToken.filter(u => url.match(u));
  if (url.indexOf('http://') < 0 || url.indexOf('https://') < 0) {
   url = 'http://' + url;
  }
  // 过滤掉不需要token的请求
  if (!needToken.length) {
   req = req.clone({
    url
   });
  } else {
   req = req.clone({
    url,
    headers: req.headers.set('token', 'asdqwe')
   });
  }
  return next.handle(req).pipe(
   tap(
    event => {
     if (event instanceof HttpResponse) {
      console.log(event);
      if (event.status >= 500) {
       // 跳转错误页面
      }
     }
    },
    error => {
     // token过期 服务器错误等处理
    })
  );
 }
}

组件:

getTemp() {
  this.http.post('172.16.10.161:3000/table', {
   params: {
    pageSize: 10,
    pageIndex: 1
   }
  }).subscribe(res => {
   console.log(res);
  });
 }

该拦截器实现的功能比较简单,但是结构算是完整的,和管道类似,想应用此拦截器需要注入在app模块,

在providers数组种添加

{ provide: HTTP_INTERCEPTORS, useClass: CommonInterceptor, multi: true }

拦截器根据业务复杂度,其内容也随着复杂,通常管理下共通的配置,核心是处理各类异常,甚至错误码处理。

总结

以上所述是小编给大家介绍的Angular8 Http拦截器简单使用教程,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
javascript之dhDataGrid Ver2.0.0代码
Jul 01 Javascript
jQuery MD5加密实现代码
Mar 15 Javascript
工作需要写的一个js拖拽组件
Jul 28 Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
JS触摸事件、手势事件详解
May 04 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
mpvue性能优化实战技巧(小结)
Apr 17 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
vue实现axios图片上传功能
Aug 20 #Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 #Javascript
vue+element-ui+axios实现图片上传
Aug 20 #Javascript
vue element upload实现图片本地预览
Aug 20 #Javascript
JS中的算法与数据结构之集合(Set)实例详解
Aug 20 #Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 #Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 #Javascript
You might like
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
五一家具促销方案
2014/01/10 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
预备党员承诺书
2014/03/25 职场文书
贺卡寄语大全
2014/04/11 职场文书
护理学专业求职信
2014/06/29 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
mysql知识点整理
2021/04/05 MySQL
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL