2012-02-05 4 views
8

私は、node.jsでconnect/expressを使用するアプリケーションで作業しています。それはこのように「静的」ミドルウェアを使用しています:./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 
}); 

は、アプリが使用する88個のオーディオファイルを含むフォルダ、./static/mp3、があります。

再訪した訪問者はファイルをキャッシュしていますが、キャッシュされたコピーの期限が切れているかどうかを尋ねるのにまだ88のHTTPリクエストを送信しています。 Expiresまたはmax-ageキャッシングをこのフォルダのみに適用するにはどうすればよいですか?

答えて

22

私がいったん接続 "ミドルウェア"方式がどのように機能するかを理解したら、答えは簡単でした。これまでのところ、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); 
1

ブランドンの答え@私はCoffeeScriptので遊ぶので、これはどのような私で、完璧でした午前:

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

乾杯!

関連する問題