Angular HTTP Interceptor ничего не делает, пока параметр конструктора не будет удален - PullRequest
0 голосов
/ 28 февраля 2019

Я реализую Caching Interceptor, следуя примерам документации Angular HTTP.

Я создал новый файл для caching-interceptor.ts (код в самом низу, после AuthInterceptor) и включилэто в провайдерах AppModule.Когда я использую приведенный ниже код как есть, ничего не происходит: никаких запросов к серверу (на вкладке «Сеть» Dev Tools), никаких выходов console.log, никаких ошибок в консоли - ничего.Но как только я очищаю параметры конструктора, то есть constructor() { console.log('constructor'); }, все начинает работать, то есть я вижу, constructor вошел в консоль и т. Д.

То же самое с AuthInterceptor, который не имелизначально конструктор.Как только я добавляю конструктор с некоторыми случайными атрибутами, он также перестает работать, и никаких ошибок нет.

Следующий Stackblitz из Angular HTTP Guide содержит оригинальный код, который я использовал для этих примеров: https://angular.io/generated/live-examples/http/stackblitz

Мой код:

AuthInterceptor (без конструктора)

import { Injectable } from '@angular/core';
import {
  HttpInterceptor,
  HttpRequest,
  HttpHandler
} from '@angular/common/http';
import { global } from 'src/app/global';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    console.log(`Auth heeader incoming`);
    const username = global.user.name;

    const authRequest = req.clone({
      setHeaders: { 'X-Custom-Header': username}
    });

    return next.handle(authRequest);
  }
}

`

CachingInterceptor

import { Injectable } from '@angular/core';
import {
  HttpEvent,
  HttpHeaders,
  HttpRequest,
  HttpResponse,
  HttpInterceptor,
  HttpHandler
} from '@angular/common/http';

import { Observable, of } from 'rxjs';
import { tap } from 'rxjs/operators';

import { RequestCacher } from 'src/app/services/request-cache.service';

@Injectable()
export class CachingInterceptor implements HttpInterceptor {
  constructor(private cache: RequestCacher) {
    console.log('constructor');
  }

  intercept(req: HttpRequest<any>, next: HttpHandler) {
    console.log('intercept');
    const cachedResponse = this.cache.get(req);
    return cachedResponse
      ? of(cachedResponse)
      : this.sendRequest(req, next, this.cache);
  }

  sendRequest(
    req: HttpRequest<any>,
    next: HttpHandler,
    cache: RequestCacher
  ): Observable<HttpEvent<any>> {
    // No headers allowed in npm search request
    const noHeaderReq = req.clone({ headers: new HttpHeaders() });

    return next.handle(noHeaderReq).pipe(
      tap(event => {
        // There may be other events besides the response.
        if (event instanceof HttpResponse) {
          cache.put(req, event); // Update the cache.
        }
      })
    );
  }
}
...