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的链式调用之each函数
Dec 03 Javascript
JavaScript对象创建及继承原理实例解剖
Feb 28 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
javascript瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
基于vue实现分页/翻页组件paginator示例
Mar 09 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
微信小程序自动客服功能
Nov 02 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
Aug 12 Javascript
原生js实现密码强度验证功能
Mar 18 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
高职教师岗位职责
2013/12/24 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
面试后的感谢信范文
2014/02/01 职场文书
项目合作意向书模板
2014/07/29 职场文书
青年标兵事迹材料
2014/08/16 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
学习普通话的体会
2014/11/07 职场文书
公务员政审材料范文
2014/12/23 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
python关于集合的知识案例详解
2021/05/30 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
vscode内网访问服务器的方法
2022/06/28 Servers