expressjs:服务静态文件忽略缓存破坏者

时间:2013-08-13 07:16:19

标签: express cdn

我有一个视图助手,它在public/文件的前面加上md5作为缓存破坏者

<link href="http://localhost:3000/139cce29ff216955a42ae663b061730d/index.css" rel="stylesheet">

由于URL中的md5部分只是浏览器的“技巧”,我希望静态表达中间件能够提供常规的public/index.css文件。

我怎样才能写出这样的规则:

//...

var static = express.static('public');

//...

app.get('/:md5([a-zA-Z0-9]{32})*', function (req, res, next) {

  var md5 = req.param('md5');
  var filepath = req.param(0);

  // --> NEED YOUR HELP HERE :) <--

  next();
});

提前谢谢

2 个答案:

答案 0 :(得分:0)

只需安装Asset Rack,您就可以同时提供所有这些文件的公共目录和缓存版本。

答案 1 :(得分:0)

如果您不能使用资产架或@dankohn建议的类似物,我会执行以下操作:

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()我:

  1. 为每个匹配的请求重写网址
  2. 将请求传递给express.static(),现在看到一个无哈希的url
  3. 如果静态处理程序未捕获请求,则恢复url