Node.js nodejsexpress框架缓存

Node.js nodejsexpress框架缓存,node.js,express,Node.js,Express,我正在使用Nodejs和expressjs。我还将NowJS添加到expressjs中,以执行一些实时任务 在我的配置文件中 app.configure('production', function() { var oneYear = 31557600000; app.use(express.static(__dirname + '/public', { maxAge: oneYear })); app.use(express.errorHandler());}); 我使用以下命令运行应用程序

我正在使用Nodejs和expressjs。我还将NowJS添加到expressjs中,以执行一些实时任务

在我的配置文件中

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)似乎没有被缓存,它们总是作为新文件提供


p/s:我刚刚用localhost对其进行了测试,缓存似乎在localhost上工作,但是,当上传到服务器时,缓存不再工作。

Express是基于Connect构建的,Connect提供了“静态”中间件。下面是缓存的代码:

if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (maxAge / 1000));
您可以在此处找到该代码:


如您所见,Express正在向浏览器发送一个“缓存控制”头,告诉他将该文件缓存一段时间。因此,这不是“加载一个文件一次,然后始终为所有客户端提供”,而是“告诉每个客户端在第一次下载文件时缓存该文件”(这意味着所有客户端在缓存该文件之前都必须下载该文件一次)。

编辑:我错了,请参阅下面的eug评论

Connect包括缓存中间件:

因此,这应该是很容易的

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

以下代码执行此任务:

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

下面的代码实现了这一点:

var cacheTime = 86400000*7;     // 7 days

app.use(express.static(__dirname + '/public',{ maxAge: cacheTime }));
然而,我的公共目录包含CSS和html文件

有没有一种方法我可以缓存css文件,而不是html


我尝试在html文件的meta标记中设置“no cache”,但它不起作用。

connect.staticCache()
现在已被弃用。是否引用了此弃用信息?应该用什么来代替?应该用什么来代替?更重要的是,为什么它被弃用?staticCache不是关于HTTP缓存,而是缓存节点内文件的内容,这样就不必从操作系统读取这些内容,也不必发送弃用消息。我想你们应该使用“真正的”缓存而不是中间件。若你们使用F5,那个么浏览器会从服务器加载文件。在地址栏中按enter键可从缓存加载文件。可能与的重复,但express static提供了公用服务器端缓存files@MuhammadUmer查看此->