在修改其有效负载之前克隆响应?

时间:2017-10-16 20:09:55

标签: javascript angular typescript

假设我们在基于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响应?

1 个答案:

答案 0 :(得分:-1)

响应拦截器officially allowed要么修改响应对象,要么创建一个全新的响应对象。

  

存在拦截器来检查和改变传出请求和传入响应。

  

拦截器也可以通过在next.handle()返回的流上应用其他Rx运算符来选择转换响应事件流。

因此,您的问题的答案是您不需要保持响应不受影响。这意味着你在编程中处于一个美妙的空间,在那里你可以决定是否编写一个拦截器来做或不做出反应。

如果您想更改只读属性,则必须创建新的响应,而不是更改您的响应。