Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
expressjs:service静态文件忽略缓存buster_Express_Cdn - Fatal编程技术网

expressjs:service静态文件忽略缓存buster

expressjs:service静态文件忽略缓存buster,express,cdn,Express,Cdn,我有一个视图帮助程序,它预先添加了public/文件的md5,以充当缓存清除器: 因为URL中的md5部分只是浏览器的“把戏”,所以我希望静态express中间件能够为常规的public/index.css文件提供服务 我如何编写这样的规则: /。。。 var static=express.static('public'); //... app.get('/:md5([a-zA-Z0-9]{32})*',函数(req,res,next){ var md5=请求参数('md5'); var f

我有一个视图帮助程序,它预先添加了
public/
文件的md5,以充当缓存清除器:


因为URL中的md5部分只是浏览器的“把戏”,所以我希望静态express中间件能够为常规的
public/index.css
文件提供服务

我如何编写这样的规则:

/。。。
var static=express.static('public');
//...
app.get('/:md5([a-zA-Z0-9]{32})*',函数(req,res,next){
var md5=请求参数('md5');
var filepath=req.param(0);

//-->此处需要您的帮助:)只需安装,您就可以提供所有这些文件的公共目录和缓存buster版本。

如果您不能使用@dankohn建议的Asset Rack或类似工具,我将执行以下操作:

app.get('/:md5([a-zA-Z0-9]{32})*', removeHash, express.static('public'), restoreUrl);

function removeHash (req, res, next) {
  req._restoreUrl = req.url;
  req.url = '/' + req.url.split('/').splice(2).join('/');
  next();
}

function restoreUrl (req, res, next) {
  req.url = req._restoreUrl;
  next();
}
因此,要利用express.static()I:

  • 重写每个匹配请求的url
  • 将请求传递给express.static(),它现在可以看到一个无散列的url
  • 如果静态处理程序未捕获请求,请还原url

  • 嘿,谢谢你的推荐。那就
    res.redirect(filepath)怎么样
    ?在您回答之前,我刚刚测试了这个问题,它似乎很有效。您的想法?我不会这样做,因为它会在客户端和服务器之间对每个文件和客户端产生额外的请求…我也不会100%确信只会匹配资产。这就是为什么我在上一个中间件中恢复了req.url。如果一些新功能nality one day使用哈希,它不应该因为重定向而被破坏。你可以删除该函数,但如果你100%确信其他任何函数都不会发生冲突。