在express.js中服务预压缩的gzip文件(不与compress())

问题描述:

我正在寻找服务gzip文件,但是我目前所使用的所有方法似乎都没有任何效果。在express.js中服务预压缩的gzip文件(不与compress())

我在我的静态资产文件夹中有一个带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文件(它也不会添加正确的头)

+0

对我的作品没关系。唯一需要注意的是,你在静态中间件中声明了“重写”中间件_before_,并确定“__dirname”是静态资产的正确目录吗? – robertklep

+0

我添加了一个exta检查来查看文件是否存在,我用这个检查更新了我的代码。当我在静态中间件之后定义重写中间件时,请求不会打印我的日志语句 –

+0

让我们退一步:请求哪个URL以及您要返回的文件在哪个目录中? – robertklep

问题是您的静态中间件安装程序,它指向错误的路径。

鉴于您的评论信息:

  • .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/')) 
+0

感谢您的迅速回复,我更新了原始问题以更好地表示我的目录结构。但是,我似乎没有得到正确的路径。 –

+0

是的,它的工作!谢谢! –