UNPKG

koa-mongo-router

Version:
126 lines (125 loc) 4.21 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.closeDatabases = exports.getDatabaseCollection = exports.getDatabase = exports.getMongoClient = exports.resetMongoClient = exports.setMongoClientOptions = void 0; const mongodb_1 = require("mongodb"); const node_server_utils_1 = require("node-server-utils"); let mongoConnectionString = 'mongodb://localhost:27017'; if (process.env.MONGO_CONNECTION_STRING != undefined) { mongoConnectionString = process.env.MONGO_CONNECTION_STRING; } let mongoClientPromise; let mongoClientOptions = { ignoreUndefined: true, // bufferMaxEntries: 0, useNewUrlParser: true, // reconnectTries: Number.MAX_VALUE, useUnifiedTopology: true, }; function setMongoClientOptions(options) { if (options != undefined) { mongoClientOptions = Object.assign(Object.assign({}, mongoClientOptions), options); } resetMongoClient(); } exports.setMongoClientOptions = setMongoClientOptions; function resetMongoClient() { mongoClientPromise = undefined; databases = {}; } exports.resetMongoClient = resetMongoClient; function getMongoClient(createConnection = true, options) { if (mongoClientPromise == undefined) { /* istanbul ignore next */ if (!createConnection) { return Promise.reject(new Error('No connection')); } setMongoClientOptions(options); mongoClientPromise = mongodb_1.MongoClient.connect(mongoConnectionString, mongoClientOptions).catch( /* istanbul ignore next */ (err) => { resetMongoClient(); throw err; }); } return mongoClientPromise; } exports.getMongoClient = getMongoClient; let databases = {}; async function getDatabase(databaseName) { const mongoClient = await getMongoClient(); const db = mongoClient.db(databaseName); if (databases[databaseName] === db) { return db; } databases[databaseName] = db; node_server_utils_1.logger.debug({ message: 'database connected', database: db.databaseName, }); db.on('error', /* istanbul ignore next */ (mongoError) => { node_server_utils_1.logger.error({ message: 'database error', database: db.databaseName, error: mongoError != undefined ? mongoError.message : undefined, }); }) .on('parseError', /* istanbul ignore next */ (mongoError) => { node_server_utils_1.logger.error({ message: 'database parseError', database: db.databaseName, error: mongoError != undefined ? mongoError.message : undefined, }); }) .on('timeout', /* istanbul ignore next */ (mongoError) => { node_server_utils_1.logger.error({ message: 'database timeout', database: db.databaseName, error: mongoError != undefined ? mongoError.message : undefined, }); }) .on('close', /* istanbul ignore next */ (mongoError) => { node_server_utils_1.logger.debug({ message: 'database closed', database: db.databaseName, error: mongoError != undefined ? mongoError.message : undefined, }); }) .on('reconnect', /* istanbul ignore next */ () => { node_server_utils_1.logger.info({ message: 'database reconnect', database: db.databaseName }); }) .on('fullsetup', /* istanbul ignore next */ () => { node_server_utils_1.logger.info({ message: 'database full setup', database: db.databaseName, }); }); return db; } exports.getDatabase = getDatabase; async function getDatabaseCollection(databaseName, collectionName) { const database = await getDatabase(databaseName); return database.collection(collectionName); } exports.getDatabaseCollection = getDatabaseCollection; /* istanbul ignore next */ async function closeDatabases(force = false) { try { const mongoClient = await getMongoClient(false); await mongoClient.close(force); } catch (err) { /* do nothing */ } } exports.closeDatabases = closeDatabases;