Node.js/Express缓存

7

我对Node.js/Express还很陌生,但我觉得我正在慢慢掌握它。我添加了这段代码,据我所知,这似乎是相当标准的:

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

查看Chrome的缓存可以发现,所有内容都被缓存了。太好了!但是当我在我的网站上运行Chrome的审计(并且我注意到,在其他使用Node的网站上也是如此),Chrome说该网站没有缓存任何内容。这种差异可能是什么原因引起的呢?


1
你在运行之前设置了'production'环境吗? - EhevuTov
是的,正在使用Nodejitsu运行,它自动将“production”作为默认设置。在本地以生产模式运行会在所有资源上产生头部max-age=0。似乎Chrome只是为了安全起见进行缓存,因为检查器中没有显示任何缓存内容。 - JacobEvelyn
1个回答

10
var express = require('express');
var app = express.createServer();
var oneYear = 31557600000;
app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.errorHandler());
app.get('/', function(req, res){
  res.send('hello world');
});
app.listen(3000);

执行上述代码后,访问位于/public目录下的test.html页面并具有测试图像,我得到了以下响应头,并且我的PC上的Chrome Audit表现良好(Chrome 17.0.963.83,Linux,Node 0.6.13,Express最新版)。您应该仔细检查是否真的处于生产模式。

Accept-Ranges:bytes
Cache-Control:public, max-age=31557600
Connection:keep-alive
Date:Fri, 23 Mar 2012 22:52:24 GMT
ETag:"120877-1278958150000"
Last-Modified:Mon, 12 Jul 2010 18:09:10 GMT
X-Powered-By:Express

1
所以我是个白痴...我一直在看我的请求的缓存控制头而不是响应的。但是我仍然有Chrome审核方面的问题...当我在生产模式下本地运行时,一切都很好:Cache-Control头正确,Chrome审核没有抱怨。然而,当我部署到Nodejitsu时,Cache-Control仍然是正确的(这意味着它必须使用生产模式),但现在Chrome的审核说没有缓存任何内容。 - JacobEvelyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接