Skip to content
Snippets Groups Projects
Commit c1b3a7f2 authored by Xiao Gui's avatar Xiao Gui
Browse files

bugfix: file preview decoding content

parent e2b5f4d3
No related branches found
No related tags found
No related merge requests found
......@@ -82,7 +82,8 @@ app.use(require('./devBanner'))
* this allows locally built aot to be served without errors
*/
const { compressionMiddleware } = require('./compression')
const { compressionMiddleware } = require('nomiseco')
app.use(compressionMiddleware, express.static(PUBLIC_PATH))
const jsonMiddleware = (req, res, next) => {
......
const BROTLI = `br`
const GZIP = `gzip`
const detEncoding = (acceptEncoding = '') => {
if (process.env.NODE_ENV !== 'production') return null
return /br/i.test(acceptEncoding)
? BROTLI
: /gzip/i.test(acceptEncoding)
? GZIP
: null
}
const mimeMap = new Map([
['.png', 'image/png'],
['.gif', 'image/gif'],
['.jpg', 'image/jpeg'],
['.jpeg', 'image/jpeg'],
['.css', 'text/css'],
['.html', 'text/html'],
['.js', 'text/javascript']
])
exports.BROTLI = BROTLI
exports.GZIP = GZIP
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)
return next()
}
if (encoding === GZIP) {
req.url = req.url + '.gz'
res.set('Content-Encoding', encoding)
return next()
}
next()
}
\ No newline at end of file
const mocha = require('mocha')
const chai = require('chai')
const expect = chai.expect
const { detEncoding, GZIP, BROTLI } = require('./index')
const gzip = 'gzip'
const gzipDeflate = 'gzip, deflate'
const gzipDeflateBr = 'gzip, deflate, br'
describe('compression/index.js', () => {
let nodeEnv
before(() => {
nodeEnv = process.env.NODE_ENV
})
after(() => {
process.env.NODE_ENV = nodeEnv
})
describe('#detEncoding', () => {
it('When NODE_ENV is set to production, returns appropriate encoding', () => {
process.env.NODE_ENV = 'production'
expect(detEncoding(null)).to.equal(null)
expect(detEncoding(gzip)).to.equal(GZIP)
expect(detEncoding(gzipDeflate)).to.equal(GZIP)
expect(detEncoding(gzipDeflateBr)).to.equal(BROTLI)
})
it('When NODE_ENV is set to non production, returns null always', () => {
process.env.NODE_ENV = 'development'
expect(detEncoding(null)).to.equal(null)
expect(detEncoding(gzip)).to.equal(null)
expect(detEncoding(gzipDeflate)).to.equal(null)
expect(detEncoding(gzipDeflateBr)).to.equal(null)
})
})
})
\ No newline at end of file
const express = require('express')
const { getTemplateNehubaConfig } = require('./query')
const { detEncoding } = require('../compression')
const { detEncoding } = require('nomiseco')
const nehubaConfigRouter = express.Router()
......
const fs = require('fs')
const path = require('path')
const { BROTLI, GZIP } = require('../compression')
const { BROTLI, GZIP } = require('nomiseco')
const getFileAsPromise = filepath => new Promise((resolve, reject) => {
fs.readFile(filepath, 'utf-8', (err, data) => {
......
......@@ -20,6 +20,7 @@
"helmet-csp": "^2.8.0",
"jwt-decode": "^2.2.0",
"memorystore": "^1.6.1",
"nomiseco": "0.0.2",
"openid-client": "^2.4.5",
"passport": "^0.4.0",
"request": "^2.88.0"
......
const router = require('express').Router()
const query = require('./query')
const path = require('path')
const { detEncoding } = require('../compression')
const { detEncoding } = require('nomiseco')
/**
* root path fetches all templates
......
const fs = require('fs')
const path = require('path')
const { BROTLI, GZIP } = require('../compression')
const { BROTLI, GZIP } = require('nomiseco')
exports.getAllTemplates = () => new Promise((resolve, reject) => {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment