| | const path = require('path'); |
| | const express = require('express'); |
| | const expressStaticGzip = require('express-static-gzip'); |
| |
|
| | const oneDayInSeconds = 24 * 60 * 60; |
| |
|
| | const sMaxAge = process.env.STATIC_CACHE_S_MAX_AGE || oneDayInSeconds; |
| | const maxAge = process.env.STATIC_CACHE_MAX_AGE || oneDayInSeconds * 2; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | function staticCache(staticPath, options = {}) { |
| | const { noCache = false, skipGzipScan = false } = options; |
| |
|
| | const setHeaders = (res, filePath) => { |
| | if (process.env.NODE_ENV?.toLowerCase() !== 'production') { |
| | return; |
| | } |
| | if (noCache) { |
| | res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate'); |
| | return; |
| | } |
| | if (filePath && filePath.includes('/dist/images/')) { |
| | return; |
| | } |
| | const fileName = filePath ? path.basename(filePath) : ''; |
| |
|
| | if ( |
| | fileName === 'index.html' || |
| | fileName.endsWith('.webmanifest') || |
| | fileName === 'manifest.json' || |
| | fileName === 'sw.js' |
| | ) { |
| | res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate'); |
| | } else { |
| | res.setHeader('Cache-Control', `public, max-age=${maxAge}, s-maxage=${sMaxAge}`); |
| | } |
| | }; |
| |
|
| | if (skipGzipScan) { |
| | return express.static(staticPath, { |
| | setHeaders, |
| | index: false, |
| | }); |
| | } else { |
| | return expressStaticGzip(staticPath, { |
| | enableBrotli: false, |
| | orderPreference: ['gz'], |
| | setHeaders, |
| | index: false, |
| | }); |
| | } |
| | } |
| |
|
| | module.exports = staticCache; |
| |
|