Am trying to have a single "static" thread for my database in nodejs. however it just keeps making new instances
const mysqlModule = require('mysql2/promise');
const Ioredis = require('ioredis');
const config = require('./config');
class database {
constructor() {
if (!database.instance) {
console.log("Making Database Instance.");
this.mysql = null;
this.redis = null;
this.initialize();
database.instance = this;
}
return database.instance;
}
initialize() {
try {
console.log("Connecting to DB...");
this.createMysql();
this.createRedis();
} catch (error) {
console.error('Error initializing database:', error);
process.exit(1);
}
}
createMysql() {
this.mysql = mysqlModule.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.pass,
database: config.mysql.database,
waitForConnections: true,
connectionLimit: 10000,
queueLimit: 0,
connectTimeout: 15,
multipleStatements: false
});
}
createRedis() {
this.redis = new Ioredis({
host: config.redis.host,
port: config.redis.port,
});
}
}
const db = new database();
module.exports = db;
else where i then const db = require('../../database'); and due to cluster it just connects each core..
and the result is: Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB... Making Database Instance. Connecting to DB...
What am i doing wrong here?
i tried placing a let instance variable outside the class but that didn't help