Very simple template organizer for Node.JS


Very simple template organizer for Node.js

It asynchroniously renders the templates via the mustache or user-supplied function.

I wrote it because of template inheritance support lack in the mustache. Which (lack itself) is a very bright idea, I think.

But my web-pages consists of many components that should be choosen at runtime and rendered independently and (I prefer) asynchroniously.

Feel free to use, ask questions and contribute =)

npm install atemplate
var ATOptions = {
    "renderFuncType": "callback",
    "renderFunc": function (template, data, callback) {
        do_something_async_with_data_and_template(template, data, function (err, newData) {
            if (err) return callback(err);
            callback(null, newData);

var ATemplate = require("ATemplate")("/path/to/views", ATOptions);

First module initializer function argument is required and sets path to the template base directory.

Second parameter is optional and must be a dictionary, containing renderFunc and renderFuncType settings.

renderFuncType should be "return" or "callback"

Rendering function should take two or three arguments (depending on rederFuncType)

  1. template file contents
  2. data source
  3. callback function (traditionally with "err, results" interface) — only in case of rederFuncType set to "callback"

Data source can be dictionary, function that returns dictionary or ATemplate instance (which makes most of the magic).

Again: datasource can't be anything else than dictionary or another ATemplate instance.

Third parameter is required if renderFuncType is set to "callback". Otherwise rendering function should return a string value via the return statement.

This is how I user ATemplate with the default mustache rendering

var ATemplate = require("ATemplate")(app.get("views"));

app.get('/login/', function (req, res) {
    new ATemplate("guest", {
        navbar: new ATemplate("navbar_guest"),
        content: new ATemplate("login_form")
    }).render(function (err, body) {
        if (err) throw new Error(err);