2

我有一个视图助手,它预先将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();
});

先感谢您

4

2 回答 2

0

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

于 2013-08-13T10:14:12.083 回答
0

如果您不能按照@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() 我:

  1. 为每个匹配的请求重写 url
  2. 将请求传递给 express.static(),它现在会看到一个无哈希的 url
  3. 如果静态处理程序没有捕获请求,则恢复 url
于 2013-08-13T11:06:12.573 回答