假设我们在基于Angular 4 HttpClient
的应用中实现了响应拦截器:
export class MyInterceptor implements HttpInterceptor {
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).map((event: HttpEvent<any>) => {
if (!(event instanceof HttpResponse))
return event;
// Modify event.body somehow like: event.body.items = { ... }; - do we need to do event.clone() before?
});
}
}
我们知道,如果我们实施请求拦截器,我们必须clone()
req
来保持其不变性。
但在修改通过clone()
属性公开的有效负载之前,我们是否需要body
响应?
答案 0 :(得分:-1)
响应拦截器officially allowed到要么修改响应对象,要么创建一个全新的响应对象。
存在拦截器来检查和改变传出请求和传入响应。
和
拦截器也可以通过在next.handle()返回的流上应用其他Rx运算符来选择转换响应事件流。
因此,您的问题的答案是您不需要保持响应不受影响。这意味着你在编程中处于一个美妙的空间,在那里你可以决定是否编写一个拦截器来做或不做出反应。
如果您想更改只读属性,则必须创建新的响应,而不是更改您的响应。