如何使连接/表达在特定目录上使用非过期缓存

Bra*_*aby 8 caching http connect node.js express

我正在开发一个使用connect/express和node.js的应用程序.它使用像这样的"静态"中间件:

var express = require("express");
var io = require("socket.io");

var app = express.createServer(
    express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);

var listener = io.listen(app);
var lobby = listener.of("/lobby");
lobby.on("connection", function (socket) {
    // etc etc etc
});
Run Code Online (Sandbox Code Playgroud)

在内部./static,有一个文件夹,./static/mp3包含应用程序使用的88个音频文件.

虽然回访的访问者已经缓存了这些文件,但令他疯狂的是他们仍然发送了88个http请求,询问他们的缓存副本是否已过期. 如何仅为此文件夹强制执行Expiresmax-age缓存?

Bra*_*aby 22

好的,一旦我意识到连接"中间件"方案如何工作,答案就很容易了.我的解决方案,到目前为止似乎工作得很好,是static在调用之前插入我自己的中间件express#createServer,如下所示:

var app = express.createServer(
    (function(req, res, next) {
        if(req.url.indexOf("/mp3/") === 0) {
            res.setHeader("Cache-Control", "public, max-age=345600"); // 4 days
            res.setHeader("Expires", new Date(Date.now() + 345600000).toUTCString());
        }
        return next();
    }),
    express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
Run Code Online (Sandbox Code Playgroud)