diff --git a/server/controllers/ReaderController.js b/server/controllers/ReaderController.js index c388bf8c..3d64e9a2 100644 --- a/server/controllers/ReaderController.js +++ b/server/controllers/ReaderController.js @@ -1,11 +1,12 @@ const BaseController = require('./BaseController'); -const ReaderWorker = require('../core/ReaderWorker'); -const readerStorage = require('../core/readerStorage'); +const ReaderWorker = require('../core/ReaderWorker');//singleton +const ReaderStorage = require('../core/ReaderStorage');//singleton const WorkerState = require('../core/WorkerState');//singleton class ReaderController extends BaseController { constructor(config) { super(config); + this.readerStorage = new ReaderStorage(); this.readerWorker = new ReaderWorker(config); this.workerState = new WorkerState(); } @@ -39,7 +40,7 @@ class ReaderController extends BaseController { if (!request.items || Array.isArray(request.data)) throw new Error(`key 'items' is empty`); - return await readerStorage.doAction(request); + return await this.readerStorage.doAction(request); } catch (e) { error = e.message; } diff --git a/server/core/readerStorage.js b/server/core/ReaderStorage.js similarity index 89% rename from server/core/readerStorage.js rename to server/core/ReaderStorage.js index adb88870..d6e817b9 100644 --- a/server/core/readerStorage.js +++ b/server/core/ReaderStorage.js @@ -1,12 +1,22 @@ const SQL = require('sql-template-strings'); const _ = require('lodash'); -const connManager = require('../db/connManager'); +const ConnManager = require('../db/ConnManager');//singleton +let instance = null; + +//singleton class ReaderStorage { constructor() { - this.storagePool = connManager.pool.readerStorage; - this.periodicCleanCache(3*3600*1000);//1 раз в 3 часа + if (!instance) { + this.connManager = new ConnManager(); + this.storagePool = this.connManager.pool.readerStorage; + this.periodicCleanCache(3*3600*1000);//1 раз в 3 часа + + instance = this; + } + + return instance; } async doAction(act) { @@ -113,6 +123,4 @@ class ReaderStorage { } } -const readerStorage = new ReaderStorage(); - -module.exports = readerStorage; \ No newline at end of file +module.exports = ReaderStorage; \ No newline at end of file diff --git a/server/db/connManager.js b/server/db/ConnManager.js similarity index 87% rename from server/db/connManager.js rename to server/db/ConnManager.js index ec09c204..5576fa47 100644 --- a/server/db/connManager.js +++ b/server/db/ConnManager.js @@ -8,13 +8,23 @@ const migrations = { 'readerStorage': require('./migrations/readerStorage'), }; +let instance = null; + +//singleton class ConnManager { constructor() { - this._pool = {}; + if (!instance) { + this.inited = false; + + instance = this; + } + + return instance; } async init(config) { this.config = config; + this._pool = {}; const force = null;//(config.branch == 'development' ? 'last' : null); @@ -39,6 +49,7 @@ class ConnManager { this._pool[poolConfig.poolName] = connPool; } + this.inited = true; } get pool() { @@ -46,6 +57,4 @@ class ConnManager { } } -const connManager = new ConnManager(); - -module.exports = connManager; \ No newline at end of file +module.exports = ConnManager; \ No newline at end of file diff --git a/server/index.js b/server/index.js index 9f51979d..afb6f188 100644 --- a/server/index.js +++ b/server/index.js @@ -11,7 +11,7 @@ const path = require('path'); const express = require('express'); const compression = require('compression'); -const connManager = require('./db/connManager'); +const connManager = new(require('./db/ConnManager'))();//singleton async function init() { await fs.ensureDir(config.dataDir);