如何在特定的目录上连接/表示使用不到期的caching

我正在开发一个使用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 }); 

./static ,有一个文件夹,./ ./static/mp3 ,包含了应用程序使用的88个audio文件。

尽pipe返回的访问者已经caching了这些文件,但是我仍然坚信,他们仍然会发送88个http请求来询问他们的caching副本是否过期。 我如何才能执行Expiresmax-agecaching,只有这个文件夹?

       

网上收集的解决方案 "如何在特定的目录上连接/表示使用不到期的caching"

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

 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() 

干杯!