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 相关文章推荐
数组方法解决JS字符串连接性能问题有争议
Jan 12 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
May 02 Javascript
jQuery中:disabled选择器用法实例
Jan 04 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
js读取并解析JSON类型数据的方法
Nov 14 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
Dec 02 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
JavaScript中立即执行函数实例详解
Nov 04 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
vue中实现回车键登录功能
Feb 19 Javascript
微信小程序实现拍照和相册选取图片
May 09 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中MVC结构学习
2006/10/09 PHP
PHP常用函数小技巧
2008/09/11 PHP
php微信支付之APP支付方法
2015/03/04 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
javascript 一些用法小结
2009/09/11 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
JS中Location使用详解
2015/05/12 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
react-router实现按需加载
2017/05/09 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
详解Python中类的定义与使用
2017/04/11 Python
python针对excel的操作技巧
2018/03/13 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
继承公证书样本
2014/04/04 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers