Writing a Singleton in Node

Singleton Module

Singleton are often needed, here is a quick way to write a singleton in Node.js:

singleton.js

module.exports = {
    x: 1,
    g: (v) => v*v
}

Use the Singleton

one.js

var singleton = require('./singleton');

module.exports = {
    f: () => {
        singleton.x = singleton.x + 20;
    }
}

two.js

var singleton = require('./singleton');

module.exports = {
    f: () => {
        singleton.x = singleton.x + 30;
    }
}

Test It

test.js

var async = require('async');
var one = require('./one');
var two = require('./two');
var singleton = require('./singleton');

console.log('before', singleton.x);

async.series([
    function(callback) {     
        one.f();
        callback(null, 'one');
    },
    function(callback) {
        console.log('after one', singleton.x);
        two.f();
        callback(null, 'two');
    },
    function(callback) {    
        console.log('after one + two', singleton.x);   
        one.f();
        callback(null, 'one');
    },
],
function(err, results) {
    console.log('after one + two + one', singleton.x);
});

run test:

Run with:

node test.js

Yields:

before 1

after one 21

after one + two 51

after one + two + one 71