gypsum
Version:
Simple and easy lightweight typescript server side framework on Node.js.
82 lines • 3.15 kB
JavaScript
;
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