Разбор HTTP ответа в Angular 7? - PullRequest
       4

Разбор HTTP ответа в Angular 7?

0 голосов
/ 30 октября 2018

Сервер возвращает данные в следующем формате: {"query": 'queryName', 'result': []}.

Мне нужно получить только часть результата, для этого я сделал это:

export class RequestInterception implements HttpInterceptor {

  public constructor(private route: Router) {

  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).do((event: HttpEvent<any>) => {
     if (event instanceof HttpResponse) {
            return event.body['result'];
     }
    }, (err: any) => {
        if (err instanceof HttpErrorResponse) {
             if (err.status === 401) {
               this.route.navigate(['/login']);
             }

          return throwError('backend comm error');

        }
    })

};

Внутри do оператор Я попробовал это:

return event.body['result'];

Но он все равно возвращает мне весь объект.

AppModule is:

 providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestInterception,
      multi: true
    },
  ],

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

HttpReponse ведет себя как JSON. Например, чтобы получить тело вашего response, вы можете сделать следующее:

response_body = response["body"]

Конечно, вы должны подписаться.

0 голосов
/ 30 октября 2018

Если вы хотите преобразовать ответ в перехватчике, то вы можете сделать это с помощью оператора map. Вы также можете использовать оператор catchError, а затем внутри него использовать throwError в случае, если код состояния 401.

Примерно так:

import { Injectable } from '@angular/core';
import { 
  HttpInterceptor, HttpRequest, HttpResponse, 
  HttpHandler, HttpEvent, HttpErrorResponse 
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import { Router } from '@angular/router';

@Injectable()
export class InterceptorService implements HttpInterceptor {

  constructor(private route: Router) { }

  intercept(
    req: HttpRequest<any>, 
    next: HttpHandler
  ) {
    return next.handle(modified)
      .pipe(
        map((event: HttpResponse<any>) => {
          event['body'] = event.body['result'];
          return event;
        }),
        catchError((error: HttpErrorResponse) => {
          if (error.status === 401) {
            this.route.navigate(['/login']);
          }
          return throwError('backend comm error');
        })
      );
  }

}

Вот Образец StackBlitz для вашей ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...