Как сделать так, чтобы connect / express использовал постоянное кэширование в определенном каталоге - PullRequest
8 голосов
/ 05 февраля 2012

Я работаю над приложением, которое использует 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-запросов, чтобы спросить, устарели ли их кэшированные копии. Как включить кэширование Expires или max-age только для этой папки?

Ответы [ 2 ]

22 голосов
/ 08 февраля 2012

Хорошо, ответ пришел легко, как только я понял, как работает схема подключения промежуточного программного обеспечения. Мое решение, которое до сих пор работало замечательно, заключалось в том, чтобы вставить свое промежуточное ПО до 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);
1 голос
/ 01 мая 2013

@ Брэндон ответил идеально, потому что я играю с 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()

Ура! * * 1004

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...