Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

How would one make connect/express use non-expiring caching on a particular directory

How would one make connect/express use non-expiring caching on a particular directory

Problem

I'm working on an app that uses connect/express with node.js. It uses the "static" middleware like this:

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

within ./static, there's a folder, ./static/mp3, containing 88 audio files used by the app.

Though returning visitors have the files cached, it's driving me nuts that they still send 88 http requests to ask if their cached copies are out of date. How can I enforce Expires or max-age caching, for only this folder?

Problem courtesy of: Brandon Lockaby

Solution

Okay, the answer came easily once I realized how the connect "middleware" scheme works. My solution, which seems to be working great so far, was to insert my own middleware before static when calling express#createServer, like this:

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);
Solution courtesy of: Brandon Lockaby

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

How would one make connect/express use non-expiring caching on a particular directory

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×