UNPKG

gypsum

Version:

Simple and easy lightweight typescript server side framework on Node.js.

82 lines 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const mongodb_1 = require("mongodb"); const logger_1 = require("../misc/logger"); const state_1 = require("../state"); const emitter_1 = require("../emitter"); function initMongo() { const logger = new logger_1.Logger('initMongo'); return new Promise((resolve, reject) => { let connections = []; let usedUrls = []; for (let i = 0; i < state_1.State.apps.length; i++) { let app = state_1.State.apps[i]; let mongoUrl = app.$get('mongodb_url'); let databaseName = app.$get('database_name'); if (!mongoUrl || !databaseName) continue; let urlIndex = usedUrls.indexOf(mongoUrl); if (urlIndex === -1) { usedUrls.push(mongoUrl); connections.push({ apps: [{ name: app.name, database_name: databaseName }], url: mongoUrl }); } else { connections[urlIndex].apps.push({ name: app.name, database_name: databaseName }); } } let connectionsDone = 0; let connectionsFailed = 0; if (connections.length) for (let i = 0; i < connections.length; i++) Connect(connections[i], logger) .then(state => { connectionsDone++; if (connectionsDone + connectionsFailed === connections.length) resolve(true); }) .catch(err => { connectionsFailed++; if (connectionsDone + connectionsFailed === connections.length) resolve(true); }); else resolve(true); }); } exports.initMongo = initMongo; function Connect(connection, logger) { return new Promise((resolve, reject) => { mongodb_1.MongoClient.connect(connection.url, (err, client) => { if (err) { logger.error('mongodb connection error:', err); return reject(err); } logger.info('mongodb connected successfully.'); for (let j = 0; j < connection.apps.length; j++) { let currentApp = connection.apps[j]; let db = client.db(currentApp.database_name); emitter_1.gypsumEmitter.emit(`${currentApp.database_name} ready`, db); } process.on('SIGINT', () => cleanup(client)); process.on('SIGTERM', () => cleanup(client)); process.on('SIGHUP', () => cleanup(client)); resolve(true); }); }); } function cleanup(client) { client.close(() => { logger_1.Logger.Info('Closing DB connection and stopping the app.'); process.exit(0); }); } //# sourceMappingURL=mongo.js.map