katspaugh
katspaugh

Reputation: 17899

Stateful singleton modules

Can you have a stateful Node.js module? Like:

exports.connectionsCache = new (function () {
    var cache = {};

    this.getOrCreate = function (url) {
        if (!cache[url]) {
            cache[url] = new Connection(url);
        }
        return cache[url];
    };
}());

Will the state survive multiple require calls? Or should one use a simple global object for that?

Upvotes: 0

Views: 2480

Answers (1)

Esailija
Esailija

Reputation: 140220

require already caches the module:

test2.js:

module.exports = {
    state: 0
};

test.js

var state = require("./test2.js");

state.state = 3;

console.log(state.state);

var state2 = require("./test2.js");

console.log(state2.state);

state2.state = 4;

console.log(state.state);

Output

$ node test.js
3
3
4

Upvotes: 5

Related Questions