在express.js中提供预压缩的gzip文件(不是用compress())

时间:2017-09-21 12:59:41

标签: node.js express webpack gzip

我正在寻找一个gzip压缩文件,但是我目前遵循或提出的所有方法似乎都没有任何效果。

我的静态资源文件夹中有一个带gz扩展名的gzip压缩文件。

目前我使用了以下内容:

router.get("*.js", (req, res, next) => {

    // only if file exists, the substr is to remove /assets in front
    if (!fs.existsSync(`/app/service/public/${req.url.substr(7)}.gz`)) {
        return next();
    }

    console.log(`${req.url} -> ${req.url}.gz`);

    req.url = `${req.url}.gz`;
    res.set("Content-Encoding", "gzip");
    res.set("Content-Type", "text/javascript");
    next();
});

router.use("/assets", express.static("/app/service/public"));

文件存在并且目录已正确设置,但是对于某些它似乎没有提供gzip文件(它也没有添加正确的标头)

2 个答案:

答案 0 :(得分:1)

问题是您的静态中间件设置,它指向错误的路径。

鉴于评论中的信息:

  • .js.gz个文件存储在../public/assets/static/js/
  • 您正在请求/assets/static/js/bundle.js,该文件应使用上述目录中名为bundle.js.gz的文件

这意味着您需要使用两种静态中间件配置中的一种:

app.use('/assets', express.static(__dirname + '/../public/assets'));

或者:

app.use(express.static(__dirname + '/../public/'))

答案 1 :(得分:0)

我推荐express-static-gzip完全符合您的要求。

app.use("/", expressStaticGzip("/my/rootFolder/"));

此外,您可以指定其他选项,但是默认设置适用于您的情况。