[CST-5729] Add possibility to store response's headers into the SSR cache

This commit is contained in:
Giuseppe Digilio
2023-06-13 19:00:33 +02:00
parent 48ea7df8b2
commit 486aefebc7
3 changed files with 17 additions and 5 deletions

View File

@@ -53,7 +53,7 @@ import { buildAppConfig } from './src/config/config.server';
import { APP_CONFIG, AppConfig } from './src/config/app-config.interface';
import { extendEnvironmentWithAppConfig } from './src/config/config.util';
import { logStartupMessage } from './startup-message';
import { TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model';
import { TOKENITEM } from './src/app/core/auth/models/auth-token-info.model';
/*
@@ -374,9 +374,15 @@ function cacheCheck(req, res, next) {
}
// If cached copy exists, return it to the user.
if (cachedCopy) {
if (cachedCopy && cachedCopy.page) {
if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) {
environment.cache.serverSide.headers.forEach((header) => {
if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); }
res.setHeader(header, cachedCopy.headers[header.toLowerCase()]);
});
}
res.locals.ssr = true; // mark response as SSR-generated (enables text compression)
res.send(cachedCopy);
res.send(cachedCopy.page);
// Tell Express to skip all other handlers for this path
// This ensures we don't try to re-render the page since we've already returned the cached copy
@@ -452,16 +458,18 @@ function saveToCache(req, page: any) {
// Avoid caching "/reload/[random]" paths (these are hard refreshes after logout)
if (key.startsWith('/reload')) { return; }
// Retrieve response headers
const headers = req.res.getHeaders();
// If bot cache is enabled, save it to that cache if it doesn't exist or is expired
// (NOTE: has() will return false if page is expired in cache)
if (botCacheEnabled() && !botCache.has(key)) {
botCache.set(key, page);
botCache.set(key, { page, headers });
if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in bot cache.`); }
}
// If anonymous cache is enabled, save it to that cache if it doesn't exist or is expired
if (anonymousCacheEnabled() && !anonymousCache.has(key)) {
anonymousCache.set(key, page);
anonymousCache.set(key, { page, headers });
if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in anonymous cache.`); }
}
}