關於 Http攔截器問題
来源:5-5 Http 拦截器 HttpInterceptor
阿倫
2019-06-23
老師請問
- 若有多個 HttpInterceptor 中的 next 會指向下一個攔截器對嗎? 順序是依賴注入的順序嗎?
- next.handle(req).pipe() 這個裡面的處理函式,是在外面 component 訂閱之前執行嗎? 不大理解這段寫法!?
写回答
2回答
-
1, next 是一个叫 HttpHandler 的对象,这个对象是用来处理 Http Request 的,处理的结果是产生一个 HTTP 事件流,其中 HttpResponse 也就是服务端返回的响应会出现在这个流中。在 interceptor 中的HttpHandler( 也就是 next)参数就是下一个 interceptor。 Interceptor 的顺序不是依赖注入的顺序,而是在 providers 数组中声明的顺序,注意这个 providers 数组虽然是为依赖注入服务的,但不能叫依赖注入的顺序,因为注入行为是发生在你的组件或其它类构造中的。
2. 拦截器之所以叫拦截,说明这个行为发生在 request 发起之后,也就在订阅之后,这个拦截行为才会发生。如果在 handle 之前进行处理,就是在 request 真正发送给服务器之前对于 request 进行处理,处理后再发送请求。而在 handle 之后则是接到服务器的 response 之后,进行处理,然后再交给 httpclient,对于 httpclient 来说,收到的 response 就是你处理后的。
012019-06-23 -
阿倫
提问者
2019-06-23
謝謝老師,講解的非常清楚。
再請問老師一下,request 跟 response 攔截器都可以是多過對吧且每個攔截器應該單一職責。012019-06-23
相似问题