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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
jQuery 使用手册(七)
Sep 23 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
JS实现的最简Table选项卡效果
Oct 14 Javascript
AngularJS 让人爱不释手的八种功能
Mar 23 Javascript
Listloading.js移动端上拉下拉刷新组件
Aug 04 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
Nov 07 Javascript
Node.js数据库操作之查询MySQL数据库(二)
Mar 04 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 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
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
php获取域名的google收录示例
2014/03/24 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
js的with语句使用方法
2007/09/21 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
python类和函数中使用静态变量的方法
2015/05/09 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
医院辞职信范文
2014/01/17 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
爽歪歪广告词
2014/03/20 职场文书
护士节策划方案
2014/05/19 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
优秀员工自荐书
2015/03/06 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
德劲DE1102数字调谐收音机机评
2022/04/07 无线电