-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMongoDbConnectionManager.ts
More file actions
76 lines (60 loc) · 2.45 KB
/
MongoDbConnectionManager.ts
File metadata and controls
76 lines (60 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import mongoose = require('mongoose');
import Q = require('q');
import I = require('./Interfaces');
import settings = require('./config/settings');
let logger = require('./logger');
class MongoDbConnectionManager {
private mongooseConnection: mongoose.Connection;
private buildMongoConnectionString(): string {
let connectionString: string = "mongodb://";
if (settings.mongoDbUsername && settings.mongoDbPassword) {
connectionString += settings.mongoDbUsername + ":" + settings.mongoDbPassword + "@";
}
connectionString += settings.mongoDbUris[0];
for (let i: number = 1; i < settings.mongoDbUris.length; i++) {
connectionString += "," + settings.mongoDbUris[i];
}
connectionString += "/" + settings.mongoDbName;
if (settings.mongoDbReplicaSet) {
connectionString += "?" + settings.mongoDbReplicaSet;
}
logger.info("MongoDb connection string is " + connectionString);
return connectionString;
}
public connect(): Q.Promise<any> {
let deferred: Q.Deferred<void> = Q.defer<void>();
let mongooseConnectionsOptions: mongoose.ConnectionOptions = {
user: settings.mongoDbUsername,
pass: settings.mongoDbPassword,
server: {
auto_reconnect: true,
reconnectInterval: settings.mongoDbReconnectIntervalMillis,
reconnectTries: settings.mongoDbReconnectTries,
socketOptions: {
keepAlive: settings.mongoDbKeepAlive
},
}
};
let connectionString: string = this.buildMongoConnectionString();
this.mongooseConnection = mongoose.createConnection(connectionString, mongooseConnectionsOptions)
this.mongooseConnection.on('error', (err: any) => {
logger.error('Mongoose error while connecting/connected', { error: err, errorMsg: err.message, connectionString: connectionString });
deferred.reject(err);
});
this.mongooseConnection.once('open', function () {
logger.info("Mongoose opened", { connectionString: connectionString });
deferred.resolve();
});
this.mongooseConnection.on('disconnected', function () {
logger.error('Mongoose disconnected', { connectionString: connectionString });
});
this.mongooseConnection.on('reconnected', function () {
logger.info('Mongoose reconnected', { connectionString: connectionString });
});
return deferred.promise;
}
public model<T extends mongoose.Document>(name: string, schema?: mongoose.Schema, collection?: string): mongoose.Model<T> {
return this.mongooseConnection.model<T>(name, schema, collection);
}
}
export = MongoDbConnectionManager;