diff --git a/deploy/app.js b/deploy/app.js index 1d177c569118df2a3b13fe0675f7ee88829eac78..072bad34549a13ea0169f0375cb4dfe5a879e928 100644 --- a/deploy/app.js +++ b/deploy/app.js @@ -66,17 +66,14 @@ app.use('/.well-known', express.static(path.join(__dirname, 'well-known'))) * only use compression for production * this allows locally built aot to be served without errors */ -if (process.env.NODE_ENV === 'production') { - const { compressionMiddleware } = require('./compression') - app.use(compressionMiddleware, express.static(PUBLIC_PATH)) -} else { - app.use(express.static(PUBLIC_PATH)) -} -app.use((req, res, next) => { +const { compressionMiddleware } = require('./compression') +app.use(compressionMiddleware, express.static(PUBLIC_PATH)) + +const jsonMiddleware = (req, res, next) => { res.set('Content-Type', 'application/json') next() -}) +} const templateRouter = require('./templates') const nehubaConfigRouter = require('./nehubaConfig') @@ -84,11 +81,11 @@ const datasetRouter = require('./datasets') const pluginRouter = require('./plugins') const previewRouter = require('./preview') -app.use('/templates', templateRouter) -app.use('/nehubaConfig', nehubaConfigRouter) -app.use('/datasets', datasetRouter) -app.use('/plugins', pluginRouter) -app.use('/preview', previewRouter) +app.use('/templates', jsonMiddleware, templateRouter) +app.use('/nehubaConfig', jsonMiddleware, nehubaConfigRouter) +app.use('/datasets', jsonMiddleware, datasetRouter) +app.use('/plugins', jsonMiddleware, pluginRouter) +app.use('/preview', jsonMiddleware, previewRouter) const catchError = require('./catchError') app.use(catchError) diff --git a/deploy/compression/index.js b/deploy/compression/index.js index 4d0a9caabd9cd18ca9ba5be10f2c44792bf2499e..bc5d2acb4b69d219d1a6c32bb0148296c4d020c4 100644 --- a/deploy/compression/index.js +++ b/deploy/compression/index.js @@ -30,22 +30,28 @@ exports.detEncoding = detEncoding exports.compressionMiddleware = (req, res, next) => { const acceptEncoding = req.get('Accept-Encoding') const encoding = detEncoding(acceptEncoding) + + // if no encoding is accepted + // or in dev mode, do not use compression + if (!encoding) return next() const ext = /(\.\w*?)$/.exec(req.url) + // if cannot determine mime-type, do not use encoding + // as Content-Type header is required for browser to understand response if (!ext || !mimeMap.get(ext[1])) return next() + res.set('Content-Type', mimeMap.get(ext[1])) + if (encoding === BROTLI) { req.url = req.url + '.br' res.set('Content-Encoding', encoding) - res.set('Content-Type', mimeMap.get(ext[1])) return next() } if (encoding === GZIP) { req.url = req.url + '.gz' res.set('Content-Encoding', encoding) - res.set('Content-Type', mimeMap.get(ext[1])) return next() }