Http 如何让connect/express在特定目录上使用非过期缓存

Http 如何让connect/express在特定目录上使用非过期缓存,http,caching,node.js,express,connect,Http,Caching,Node.js,Express,Connect,我正在开发一个使用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 = i

我正在开发一个使用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
});
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);
/static
中,有一个文件夹
/static/mp3
,其中包含应用程序使用的88个音频文件


尽管归来的访问者缓存了文件,但他们仍然发送88个http请求询问缓存的副本是否过期,这让我抓狂我如何仅为该文件夹强制执行
Expires
max age
缓存?

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

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
});
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);

@布兰登的回答很完美,因为我玩的是咖啡脚本,这就是我使用的:

app.use (req, res, next) ->
  if req.url.indexOf "/js/" == 0 || req.url.indexOf "/img/" == 0
    res.setHeader "Cache-Control", "public, max-age=345600"
    res.setHeader "Expires", new Date(Date.now() + 345600000).toUTCString()
    next()
干杯