Web Dev Solutions

Catalin Mititiuc

From 693d0c05017d14c82dd292fde37c00e84822a616 Mon Sep 17 00:00:00 2001 From: Catalin Mititiuc Date: Mon, 27 May 2024 12:13:54 -0700 Subject: Use a proxy to set cache-control header on responses --- esbuild-server.mjs | 116 +++++++++++++++++------------------------------------ 1 file changed, 36 insertions(+), 80 deletions(-) diff --git a/esbuild-server.mjs b/esbuild-server.mjs index c49aa47..73fabab 100644 --- a/esbuild-server.mjs +++ b/esbuild-server.mjs @@ -1,8 +1,16 @@ -// const esbuild = require('esbuild'); -// const fs = require('node:fs'); - import * as esbuild from 'esbuild'; import * as fs from 'node:fs'; +import http from 'node:http'; + +const colors = { + reset: '\x1b[0m', + dim: '\x1b[2m', + bright: '\x1b[1m', + normal: '\x1b[22m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', +} const regex = new RegExp('mapsheets\..+\.svg'); @@ -19,84 +27,10 @@ const svgUseCacheBust = { files.forEach(fn => fs.unlinkSync(`./public/assets/images/${fn}`)); fs.copyFileSync('./public/assets/images/mapsheets.svg', `./public/assets/images/mapsheets.${version}.svg`); }) - - // version = Math.random(); - // build.onResolve({ filter: /svg/ }, args => { - // console.log('onresolve', version, args); - // }); } } -// { -// bundle: true, -// define: { -// 'env': `"${process.env.NODE_ENV || 'dev'}"`, -// }, -// entryPoints: ['src/index.js', 'src/map.js', 'src/soldier_record_block.js'], -// // outdir: 'build', -// ...(process.env.NODE_ENV !== 'test') && { -// outdir: 'build' -// }, -// assetNames: `[name]${version}`, -// plugins: [svgUseCacheBust], -// loader: { -// '.svg': 'file' -// }, -// }, - -// let ctx = await esbuild.context({ -// entryPoints: ['src/*.js'], -// outdir: 'public', -// bundle: true, -// plugins: [svgUseCacheBust], -// loader: { -// '.svg': 'file' -// }, -// }) - -// let { host, port } = await ctx.serve({ -// servedir: 'public', -// }) - -const colors = { - reset: '\x1b[0m', - dim: '\x1b[2m', - bright: '\x1b[1m', - normal: '\x1b[22m', - red: '\x1b[31m', - green: '\x1b[32m', - yellow: '\x1b[33m', -} - -// esbuild.context({ -// entryPoints: ['src/*.js'], -// outdir: 'public', -// bundle: true, -// plugins: [svgUseCacheBust], -// loader: { -// '.svg': 'file' -// }, -// logLevel: 'info', -// }).then(ctx => { -// console.log('context', ctx); - -// ctx.serve({ -// servedir: 'public', -// onRequest: function({ remoteAddress, method, path, status, timeInMS }) { -// let statusColor = colors.red; - -// if (status >= 200 && status <= 299) { -// statusColor = colors.green; -// } else if (status >= 300 && status <= 399) { -// statusColor = colors.yellow; -// } - -// console.log(`${colors.dim}${remoteAddress} - "${method} ${path}" ${colors.normal}${statusColor}${status}${colors.reset}${colors.dim} [${timeInMS}ms]${colors.reset}`); -// } -// }) -// }); - -let ctx = await esbuild.context({ +const ctx = await esbuild.context({ entryPoints: ['src/*.js'], bundle: true, outdir: 'public', @@ -105,9 +39,9 @@ let ctx = await esbuild.context({ await ctx.watch(); -let { host, port } = await ctx.serve({ +const { host, port } = await ctx.serve({ servedir: 'public', - port: 8080, + port: 3000, onRequest: function({ remoteAddress, method, path, status, timeInMS }) { let statusColor = colors.red; @@ -120,3 +54,25 @@ let { host, port } = await ctx.serve({ console.log(`${colors.dim}${remoteAddress} - "${method} ${path}" ${colors.normal}${statusColor}${status}${colors.reset}${colors.dim} [${timeInMS}ms]${colors.reset}`); }, }); + +http.createServer((req, res) => { + const options = { + hostname: host, + port: port, + path: req.url, + method: req.method, + headers: req.headers, + } + + const proxyReq = http.request(options, proxyRes => { + for (const k in proxyRes.headers) { + res.setHeader(k, proxyRes.headers[k]); + } + + res.writeHead(proxyRes.statusCode, { 'Cache-Control': 'no-cache, no-store, must-revalidate' }); + + proxyRes.pipe(res, { end: true }); + }) + + req.pipe(proxyReq, { end: true }); +}).listen(8080); -- cgit v1.2.3