Как изменить ответ, используя перехват? - PullRequest
0 голосов
/ 01 марта 2019

Я использую следующий перехват в Angular:

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

Мой ответ JSON содержит свойство data.Поэтому я пытаюсь вернуть его: 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 голосов
/ 01 марта 2019

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 для устранения этой проблемы.

...