Node.js: Multiple templating engines simultaneously in express.

I will start by saying that I am not a big fan of haml or jade. While I understand why some developers might and do enjoy them I prefer something more moustachesque

In the case you want to use more than one templating engine on your express app, here is the simple setup.

You can use consolidate.js to reconcile various engines.

Also, handlebars does not support layouts. I found express3-handlebars to fix that.

var express = require('express')
  , cons = require('consolidate')
  , exphbs  = require('express3-handlebars')
  , app = express()
  , hbs = exphbs.create({defaultLayout: 'main.html'});

app.set('views', __dirname + '/views');

// assign the swig engine to .html files
app.engine('jade', cons.jade);
app.engine('haml', cons.haml);
app.engine('html', hbs.engine);

// set .html as the default extension
app.set('view engine', 'html');

app.get('/', function(req, res){
  res.render('index', {
    title: 'Consolidate.js: HTML Handlebars'
  });
});

//Note: you need to explicitly use the extension
//to use a different render engine.
app.get('/jade', function(req, res){
  res.render('index.jade', {
    title: 'Consolidate.js: Jade'
  });
});

app.get('/haml', function(req, res){
  res.render('index.haml', {
    title: 'Consolidate.js: Haml'
  });
});

app.listen(3000);
console.log('Express server listening on port 3000');