如何在express / nodejs中添加标头到静态gzip文件?

时间:2016-03-03 14:19:37

标签: node.js express gzip

我有一些来自Unity版本的文件,我无法添加标题。他们有扩展名jsgz,memgz和datagz。它们位于我的NodeJs项目中的公共文件夹中。 我正在使用Express 4并设置了压缩,但我相信这只会压缩现有文件进行传输,而不会处理已压缩的文件。 我已尝试使用app.get添加标题,但它似乎无法正常工作:

app.get('/blah/unitymodels/Release/widget.js', function(req, res, next) {
  ... Check ['accept-encoding'] ...
  if (acceptsGzip) {
      var gzippedPath = req.url + 'gz';
      res.sendFile(gzippedPath, {
          root: './public',
          headers: {
              'Content-Encoding': 'gzip',
              'Content-Type': 'application/javascript'
          }
  }
...

我试过设置这样的标题,通过使用res.set并首先设置它们然后让next()调用处理响应但是每当我得到文件时它只是没有额外标题的gzip文件和浏览器不理解它。 我尝试过的方法会添加其他标题(' wibble',' x-timestamp'等),所以我假设其他东西正在拦截这些特定的标题。 我如何能够返回这些gzip压缩文件以便浏览器理解它们?

1 个答案:

答案 0 :(得分:1)

您可以使用express-static-gzip作为Express中间件,如下所示:

/* here serves gzipped static files */
app.use('/my_static/zipped/', expressStaticGzip('my_static/zipped/', {
    customCompressions: [{
        encodingName: "gzip",
        fileExtension: "gz"
    }]
}));

/* here serves other static files */
app.use('/my_static', express.static('my_static'));