@chevre/domain
Version:
Chevre Domain Library for Node.js
82 lines (69 loc) • 3.5 kB
text/typescript
// tslint:disable:no-console no-magic-numbers no-null-keyword
import * as mongoose from 'mongoose';
const MONGOLAB_URI = String(process.env.MONGOLAB_URI);
interface IConnectionByAppName {
connection: mongoose.Connection;
isReady: boolean;
}
const uniqueConnections: Record<string, IConnectionByAppName> = {};
export async function getUniqueConnectionByAppName(params: { appName: string }): Promise<mongoose.Connection> {
const { appName } = params;
if (uniqueConnections[appName] === undefined) {
uniqueConnections[appName] = {
connection: mongoose.createConnection(MONGOLAB_URI, { appName }),
isReady: false
};
uniqueConnections[appName].connection.on('connected', () => console.log('connected'));
uniqueConnections[appName].connection.on('open', () => console.log('open'));
uniqueConnections[appName].connection.on('disconnected', () => console.log('disconnected'));
uniqueConnections[appName].connection.on('reconnected', () => console.log('reconnected'));
uniqueConnections[appName].connection.on('disconnecting', () => console.log('disconnecting'));
uniqueConnections[appName].connection.on('close', () => console.log('close'));
}
const conectionByAppName = uniqueConnections[appName];
if (!conectionByAppName.isReady) {
console.log('connecting(asPromise)...');
await conectionByAppName.connection.asPromise();
conectionByAppName.isReady = true;
} else {
console.log('is ready.');
}
return conectionByAppName.connection;
}
async function main() {
console.log(mongoose.connections.length, 'mongoose.connections found');
mongoose.connection.on('connected', () => console.log('connected'));
mongoose.connection.on('open', () => console.log('open'));
mongoose.connection.on('disconnected', () => console.log('disconnected'));
mongoose.connection.on('reconnected', () => console.log('reconnected'));
mongoose.connection.on('disconnecting', () => console.log('disconnecting'));
mongoose.connection.on('close', () => console.log('close'));
// await mongoose.connect(MONGOLAB_URI);
// const firstConnection = mongoose.createConnection(<string>process.env.MONGOLAB_URI);
// firstConnection.on('connected', () => console.log('connected'));
// firstConnection.on('open', () => console.log('open'));
// firstConnection.on('disconnected', () => console.log('disconnected'));
// firstConnection.on('reconnected', () => console.log('reconnected'));
// firstConnection.on('disconnecting', () => console.log('disconnecting'));
// firstConnection.on('close', () => console.log('close'));
// tslint:disable-next-line:prefer-array-literal
[...Array(10)].map(async (__, i) => {
getUniqueConnectionByAppName({ appName: 'xxx' })
.then(async (connectResult) => {
console.log('connected:', connectResult.id, i);
await getUniqueConnectionByAppName({ appName: 'xxx' });
});
});
console.log(mongoose.connections.length, 'mongoose.connections found');
// db.currentOp(true)
// .inprog.forEach((op) => {
// if (op.active = true && op.client != undefined) {
// const miniOp = {
// client: op.client, description: op.desc
// };
// console.log(miniOp);
// }
// });
}
main()
.catch(console.error);