Код перехватчика не вызывается при использовании http.post - PullRequest
0 голосов
/ 02 мая 2018

Я написал (скопировал из SO!) Следующий код перехватчика. Я хочу изменить исходящий запрос, а также перехватить ответ. Однако я заметил, что ответ никогда не перехватывается. Зачем? Это потому что я использую Rxjs?

Код перехватчика

import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from "@angular/common/http";
import {Injectable} from "@angular/core";
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/do';

@Injectable()
export class CustomInterceptor implements HttpInterceptor {

  constructor() {
  }

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

    console.log("outgoing request",request);
    request = request.clone({
      withCredentials: true
    });
    console.log("new outgoing request",request);

    return next
      .handle(request)
      .do((ev: HttpEvent<any>) => {
        if (ev instanceof HttpResponse) {
          console.log('processing response', ev);  //I DON'T SEE THIS PRINT
        }
      });
  }
}

Я отправляю запрос на сервер следующим образом

 return this.http.post(/*this.API_URL+*/this.SIGNIN_USER_URL,body,httpOptions)
      .map(response=>{
        console.log('response from backend service',response); //I SEE THIS PRINT
        let result= <ServerResponse>response; 
        console.log("result is "+result.result+' with additional information '+result.additionalInformation)
        return result;
      })
  .catch(this.handleError);

Почему код перехватчика не получен?

Обновление - фрагмент кода провайдера в app.module.ts

providers: [WebToBackendInterfaceService, //some other provider
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CustomInterceptor , //interceptor provider
      multi: true
    }],

Я добавил распечатку между do и if (console.log("got an event",ev). Я вижу следующее сообщение на консоли `получил событие

{…}
​body: Object { result: "success", "additional-info": "found user" }
​headers: {…}
​lazyInit: function lazyInit()
​​lazyUpdate: null
​​normalizedNames: Map
​​​size: 0
​​​<entries>
​​​__proto__: Object { … }
​​__proto__: Object { has: has(), get: get(), keys: keys(), … }
​ok: true
​status: 200
​statusText: "OK"
​type: 4
​url: "http://localhost:9000/ws/users/signin"
​__proto__: Object { constructor: HttpResponse(), clone: clone() }`

Я не знаю, почему оператор if не выполняется, так как кажется, что событие имеет тип HttpResponse (имеется в виду ​__proto__: Object { constructor: HttpResponse(), clone: clone() })

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