如何使用拦截来修改响应?

时间:2019-03-01 16:07:49

标签: angular interception

我在Angular中使用以下拦截:

return next.handle(request).pipe(
      map((event: any) => {
        if (event.body.data) {
          return event.body.data;
        }
      }));

我的JSON响应包含数据属性。因此,我尝试将其返回:return event.body.data;

我的服务是:

public get(): Observable<any> {
   return this.http.get(environment.serverUrl + 'events');
}

使用服务

this.serviceEbents.get().subscribe(response => {
     console.log(response);
});

问题是:

ERROR TypeError: Cannot read property 'data' of undefined
    at MapSubscriber.project (RequestInterception.ts:43)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next

因此,我没有得到console.log(response);

1 个答案:

答案 0 :(得分:1)

如果您想接收完整的响应,则HttpClient已经返回了响应的主体,因此必须使用response.body获取主体,然后您需要“观察”此处https://angular.io/guide/http#reading-the-full-response描述的响应

您的服务看起来像

public get(): Observable<any> {
   return this.http.get(environment.serverUrl + 'events', { observe: 'response' });
}

否则只需说return event

还应该console.log event来调试此问题。