在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文件(它也不会添加正确的头)
答
问题是您的静态中间件安装程序,它指向错误的路径。
鉴于您的评论信息:
- 的
.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
是的,它的工作!谢谢! –
对我的作品没关系。唯一需要注意的是,你在静态中间件中声明了“重写”中间件_before_,并确定“__dirname”是静态资产的正确目录吗? – robertklep
我添加了一个exta检查来查看文件是否存在,我用这个检查更新了我的代码。当我在静态中间件之后定义重写中间件时,请求不会打印我的日志语句 –
让我们退一步:请求哪个URL以及您要返回的文件在哪个目录中? – robertklep