Я реализую 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.
}
})
);
}
}