drawkcaB | Backward Compatible logo

rants and tips about software

Node.js and Express serving the same content for HTTP and HTTPS via SSL

In my previous post I explained how to set up SSL for Node.js/Express. Now, I want to serve the same content using the same logic for both http and https, and I don’t want to duplicate my code.

The idea is to move everything involving Express app. into a function. Call the function for both http and https server. If you have global variables, make sure they are outside of this function:

var apps = express.createServer({key: pkey, cert: cert, ca: [dad1,dad2]});
var app = express.createServer();
apps.listen(443);
app.listen(80);
startServer(app, false);
startServer(apps, true);

function startServer(app, isSSL) {
    app.configure(function () { // just some sample code
        app.use(express.cookieParser());
        app.use(express.bodyParser());
        app.use(connect.static(‘public’));
    });

    app.get(‘/’, function(req, res){
        if (isSSL)
            res.end(‘Hello HTTPS’);
        else
            res.end(‘Hello HTTP’);
    });
}

This works, although I hope there is some nicer solution.

Milan Babuškov, 2011-12-01
Copyright © Milan Babuškov 2006-2014