關於 Http攔截器問題

来源:5-5 Http 拦截器 HttpInterceptor

阿倫

2019-06-23

老師請問

  1. 若有多個 HttpInterceptor 中的 next 會指向下一個攔截器對嗎? 順序是依賴注入的順序嗎?
  2. next.handle(req).pipe() 這個裡面的處理函式,是在外面 component 訂閱之前執行嗎? 不大理解這段寫法!?
写回答

2回答

接灰的电子产品

2019-06-23

1, next 是一个叫 HttpHandler 的对象,这个对象是用来处理 Http Request 的,处理的结果是产生一个 HTTP 事件流,其中 HttpResponse 也就是服务端返回的响应会出现在这个流中。在 interceptor 中的HttpHandler( 也就是 next)参数就是下一个 interceptor。 Interceptor 的顺序不是依赖注入的顺序,而是在 providers 数组中声明的顺序,注意这个 providers 数组虽然是为依赖注入服务的,但不能叫依赖注入的顺序,因为注入行为是发生在你的组件或其它类构造中的。

2. 拦截器之所以叫拦截,说明这个行为发生在 request 发起之后,也就在订阅之后,这个拦截行为才会发生。如果在 handle 之前进行处理,就是在 request 真正发送给服务器之前对于 request 进行处理,处理后再发送请求。而在 handle 之后则是接到服务器的 response 之后,进行处理,然后再交给 httpclient,对于 httpclient 来说,收到的 response 就是你处理后的。


0
1
阿倫
攔截器的順序不能說是依賴注入的順序,是 provider 聲明的順序! 謝謝老師的糾正~~~
2019-06-23
共1条回复

阿倫

提问者

2019-06-23

謝謝老師,講解的非常清楚。
再請問老師一下,request 跟 response 攔截器都可以是多過對吧且每個攔截器應該單一職責。

0
1
接灰的电子产品
可以是多个。至于单一职责属于编码的规范问题,angular 本身没有要求,但最好是单一职责了
2019-06-23
共1条回复

Angular 开发拼多多webapp 从基础到项目实战

高仿拼多多WebApp,带你在实战环境中学习Angular

1322 学习 · 451 问题

查看课程