import { Injectable } from '@angular/core'; import { HttpRequest, HttpResponse } from '@angular/common/http'; @Injectable() export class RequestCache { private cache: Map; constructor() { this.cache = new Map(); } get(req: HttpRequest): HttpResponse | undefined { const splittedUrl = req.urlWithParams.split('/'); const url = splittedUrl[splittedUrl.length - 1] + '_' + req.method; this.clearExpiredEntries(); const cached = this.cache.get(url); let cachedResponse: HttpResponse; if (cached) { cachedResponse = cached.response; } return cachedResponse; } put(req: HttpRequest, response: HttpResponse): void { const splittedUrl = req.urlWithParams.split('/'); const url = splittedUrl[splittedUrl.length - 1] + '_' + req.method; const entry = { url, response, lastRead: Date.now() }; this.cache.set(url, entry); this.clearExpiredEntries(); } private clearExpiredEntries(): void { const maxAge = 30000; const expired = Date.now() - maxAge; this.cache.forEach(expiredEntry => { if (expiredEntry.lastRead < expired) { this.cache.delete(expiredEntry.url); } }); } }