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事件函数中获得事件源的两种不错方法
Mar 17 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
Vuex之理解state的用法实例
Apr 19 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
vue自定义一个v-model的实现代码
Jun 21 Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
常用PHP封装分页工具类
2017/01/14 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
Python入门篇之条件、循环
2014/10/17 Python
Python易忽视知识点小结
2015/05/25 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python中模块string.py详解
2017/03/12 Python
Python自动发邮件脚本
2017/03/31 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
学生出入校管理制度
2014/01/16 职场文书
工作推荐信范文
2014/05/10 职场文书
社团活动总结模板
2014/06/30 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
拙作再改《我的收音机情缘》
2022/04/05 无线电