我正在使用Nodejs和Express Js.我还将NowJS添加到Express Js中来做一些实时的东西.
在我的配置文件中
app.configure('production', function() {
var oneYear = 31557600000;
app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.errorHandler());});
Run Code Online (Sandbox Code Playgroud)
我使用此命令运行应用程序:
$ NODE_ENV=production node app.js
Run Code Online (Sandbox Code Playgroud)
但是,文件(图像,css,js)似乎不会被缓存,它们总是作为新文件提供.
P/s:我刚刚使用localhost对其进行了测试,缓存似乎可以在localhost上运行,但是,当上传到服务器时,缓存不再工作了.
ale*_*lex 25
Express建立在Connect之上,Connect提供"静态"中间件.这是缓存引擎盖下的代码:
if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (maxAge / 1000));
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到代码:
https://github.com/senchalabs/connect/blob/master/lib/middleware/static.js#L147
因此,您可以看到Express正在向浏览器发送"Cache-Control"标头,告诉他将该文件缓存一段时间.所以这不是"一次加载一个文件,然后总是将其提供给所有客户端",而是更多的是"告诉每个客户端在第一次下载文件时缓存该文件"(这意味着所有客户端都必须下载)该文件在缓存之前一次).
小智 13
以下代码完成了这项工作:
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();
});
Run Code Online (Sandbox Code Playgroud)
vas*_*shu 10
以下代码可以解决问题:
var cacheTime = 86400000*7; // 7 days
app.use(express.static(__dirname + '/public',{ maxAge: cacheTime }));
Run Code Online (Sandbox Code Playgroud)
但是我的公共目录包含CSS以及html文件.
有没有办法我只能缓存css文件而不是html.
我尝试在html文件的元标记中设置"no-cache",但它不起作用.
归档时间: |
|
查看次数: |
43959 次 |
最近记录: |