美文网首页
Angular 里 HTTP 请求和响应结构的拦截器(inter

Angular 里 HTTP 请求和响应结构的拦截器(inter

作者: 华山令狐冲 | 来源:发表于2022-10-11 10:07 被阅读0次

通过拦截,开发人员可以声明拦截器来检查和转换从应用程序到服务器的 HTTP 请求。 相同的拦截器还可以在返回应用程序的途中检查和转换服务器的响应。

多个拦截器共同形成请求/响应处理程序的前向和后向链。

拦截器可以以常规、标准的方式为每个 HTTP 请求/响应执行各种隐式任务,包括但不限于身份验证到日志记录。

如果没有拦截器的概念,开发人员将不得不为每个 HttpClient 方法调用显式地实现这些任务。

要实现拦截器,开发人员必须声明一个实现 HttpInterceptor 接口的 intercept() 方法的类。

下面是一个拦截器的实现,虽然拦截了 HTTP 请求之后,并未执行任何逻辑,只是简单的把请求传递给后向链:

import { Injectable } from '@angular/core';
import {
  HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';

import { Observable } from 'rxjs';

/** Pass untouched request through to the next request handler. */
@Injectable()
export class NoopInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler):
    Observable<HttpEvent<any>> {
    return next.handle(req);
  }
}

intercept 方法将请求转换为最终返回 HTTP 响应的 Observable。

大多数拦截器在进入的过程中检查请求,并将可能更改的请求转发到实现 HttpHandler 接口的下一个对象的 handle() 方法。

与 intercept() 一样,handle() 方法将 HTTP 请求转换为 HttpEvents 的 Observable,最终包含服务器的响应。 intercept() 方法可以检查该 observable 并在将其返回给调用者之前对其进行更改,比如添加日志记录,字段过滤等等逻辑。

看个具体的例子:

上图是 SAP Spartacus UI SiteContextInterceptor 的实现,关键点如上图图例1和2所示:

  1. 使用 request.url.includes(this.occEndpoints.getBaseUrl() 判断当前请求 url 是否包含 baseUrl 片段。

  2. 如果包含,使用 request.clone, 给当前 HTTP 请求,添加 language 和 curr 参数。

这两个自动添加的参数,效果如下:

url:http://aaa/occ/v2/electronics-spa/currencies?lang=en&curr=USD

next 对象代表拦截器链中的下一个拦截器。链中的最后一个是 HttpClient 后端处理程序,它将请求发送到服务器并接收服务器的响应。

大多数拦截器调用 next.handle() 以便请求流向下一个拦截器,最终流向后端处理程序。 拦截器可以跳过调用 next.handle(),使链短路,并返回自己的 Observable 和人工服务器响应。

这是 Express.js 等框架中常见的中间件模式。

相关文章

  • Angular 里 HTTP 请求和响应结构的拦截器(inter

    通过拦截,开发人员可以声明拦截器来检查和转换从应用程序到服务器的 HTTP 请求。 相同的拦截器还可以在返回应用程...

  • 过滤器、拦截器、切片区别

    过滤器:可以拿到原始的HTTP请求和响应信息,拿不到处理请求的方法值信息 拦截器:既可以拿到HTTP请求和响应信息...

  • Go Web开发四:处理请求

    1.HTTP报文结构 HTTP分为请求和响应类型,都具有相同的结构:1.请求行或者响应行2.0个或者多个首部3.一...

  • 【vue+axios】一个项目学会前端实现登录拦截

    一个项目学会vue全家桶+axios实现登录、拦截、登出功能,以及利用axios的http拦截器拦截请求和响应。 ...

  • Vue+axios 实现http拦截及路由拦截实例

    首先我们要明白设置拦截器的目的是什么,当我们需要统一处理http请求和响应时我们通过设置拦截器处理方便很多. 这个...

  • HTTP从入门到懵逼学习笔记(三)

    HTTP报文结构  HTTP通信中请求和响应的运作。用于HTTP协议交互的信息被称为HTTP报文,请求段的HTTP...

  • 关于axios的拦截器

    首先我们要明白设置拦截器的目的是什么:当我们需要统一处理http请求和响应时我们通过设置拦截器处理方便很多。经常使...

  • HTTP

    HTTP 结构 HTTP协议建立在请求和响应的概念上,对应在node中就是http.ServerReques 和h...

  • axios拦截器

    为什么要使用axios拦截器? 页面发送http请求,很多情况我们要对请求和其响应进行特定的处理;例如每个请求都附...

  • HTTP首部

    说实在的,我们一直在请求和响应一直没有 好好看HTTP的结构,其实每个请求和响应都有首部和主体内容 请求首部 下面...

网友评论

      本文标题:Angular 里 HTTP 请求和响应结构的拦截器(inter

      本文链接:https://www.haomeiwen.com/subject/nmwaartx.html