【问题标题】:How would one make connect/express use non-expiring caching on a particular directory如何让 connect/express 在特定目录上使用非过期缓存
【发布时间】:2012-02-27 04:25:39
【问题描述】:

我正在开发一个将 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 个音频文件。

虽然回访者缓存了文件,但让我发疯的是,他们仍然发送 88 个 http 请求来询问他们的缓存副本是否已过期。 如何仅针对此文件夹强制执行 Expiresmax-age 缓存?

【问题讨论】:

    标签: http caching node.js express connect


    【解决方案1】:

    @brandon 的回答很完美,因为我玩的是 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()
    

    干杯!

    【讨论】:

      【解决方案2】:

      好的,一旦我意识到连接“中间件”方案的工作原理,答案就很容易得到了。我的解决方案,目前看来效果很好,是在调用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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多