Nodejs Express框架缓存

Tan*_*yen 24 node.js express

我正在使用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"标头,告诉他将该文件缓存一段时间.所以这不是"一次加载一个文件,然后总是将其提供给所有客户端",而是更多的是"告诉每个客户端在第一次下载文件时缓存该文件"(这意味着所有客户端都必须下载)该文件在缓存之前一次).

  • 但表达静态提供公共文件的服务器端缓存 (3认同)

小智 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",但它不起作用.

  • 如果您使用F5,则浏览器从服务器加载文件.按Enter键在地址栏中加载缓存中的文件. (2认同)