Я работаю с Sequelize
в node.js
, и идея состоит в том, чтобы использовать шаблон Singleton
.
Читайте о том, как node
работает с кешированием модулей, и некоторые примеры синглтонов
Мой файл на данный момент:
const DBManager = (function () {
// Instance stores a reference to the Singleton
let instance: any;
let db: string = null;
let user: string;
let password: string;
let host: string;
let sequelize: Sequelize.Sequelize;
function init(bdName: string) {
db = bdName;
user = process.env.MYSQL_DB_USERNAME || 'root';
password = process.env.MYSQL_DB_PASSWORD || 'root';
host = process.env.MYSQL_DB_HOST || 'localhost';
return {
open: () => {
sequelize = new Sequelize(db, user, password, {
host: host,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
operatorsAliases: false,
logging: !process.env.HIDE_LOGS
});
},
testConnection: () => {
return sequelize.authenticate();
},
getManagerObject: () => {
return sequelize;
},
close: () => {
sequelize.close();
}
};
}
return {
// Get the Singleton instance if one exists
// or create one if it doesn't
getInstance: (bd?: string) => {
if (!instance) {
instance = init(bd);
}
return instance;
}
};
})();
export default DBManager;
Итак, как и ожидалось, когда мне требуется этот файл в любом месте моего проекта, ссылки остаются теми же и работают должным образом.
Я не уверен, что это правильный способ реализации Singleton pattern
, или есть определенный и задокументированный, потому что официальная документация ничего не говорит об этом.