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 相关文章推荐
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
JavaScript中用字面量创建对象介绍
Dec 31 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
js select实现省市区联动选择
Apr 17 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
VSCode配置react开发环境的步骤
Dec 27 Javascript
Node 升级到最新稳定版的方法分享
May 17 Javascript
vue中使用echarts制作圆环图的实例代码
Jul 27 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 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
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
pyqt4教程之widget使用示例分享
2014/03/07 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Django 视图层(view)的使用
2018/11/09 Python
代码详解django中数据库设置
2019/01/28 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Django中间件基础用法详解
2019/07/18 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python 字典访问的三种方法小结
2019/12/05 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
男方父母证婚词
2014/01/12 职场文书
珍惜水资源建议书
2014/03/12 职场文书
怎样写离婚协议书
2014/09/10 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
出生公证书
2015/01/23 职场文书
青涩记忆观后感
2015/06/18 职场文书
运动会新闻稿
2015/07/17 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
python读取mat文件生成h5文件的实现
2022/07/15 Python