Nodejs Express框架caching

我正在使用Nodejs和Express Js。 此外,我还将ExpressJ添加到Express Js中以执行一些实时操作。

在我有configuration文件

app.configure('production', function() { var oneYear = 31557600000; app.use(express.static(__dirname + '/public', { maxAge: oneYear })); app.use(express.errorHandler());}); 

我使用这个命令运行应用程序:

 $ NODE_ENV=production node app.js 

但是,文件(图像,CSS,JS)似乎不被caching,他们总是作为新的文件。

P / S:我刚刚用localhosttesting过,caching似乎在localhost上工作,但是当上传到服务器时,caching不再工作了。

Express基于Connect,Connect提供“静态”中间件。 以下是caching中的代码:

 if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (maxAge / 1000)); 

你可以在这里find这个代码:

https://github.com/senchalabs/connect/blob/master/lib/middleware/static.js#L147

所以正如你所看到的,Express向浏览器发送一个“Cache-Control”头文件,告诉他caching该文件一段时间。 因此,这不是“一次加载文件,然后始终将其提供给所有客户端”,而是更多的是“告诉每个客户端首次下载文件时caching文件”(这意味着所有的客户端都必须下载那个文件被caching之前一次)。

以下代码完成这项工作:

 app.use(function (req, res, next) { if (req.url.match(/^\/(css|js|img|font)\/.+/)) { res.setHeader('Cache-Control', 'public, max-age=3600')) } next(); }); 

下面的代码可以做到这一点:

 var cacheTime = 86400000*7; // 7 days app.use(express.static(__dirname + '/public',{ maxAge: cacheTime })); 

但是,我的公共目录包含CSS以及HTML文件。

有没有办法我可以caching的CSS文件而不是HTML。

我试图设置“无caching”元标记为HTML文件,但它没有工作。

编辑:我错了,看到eug的评论如下

连接包括caching中间件: http : //senchalabs.github.com/connect/middleware-staticCache.html

所以它应该像…一样容易

 app.use(express.cache(...)); app.use(express.static(...));