@@ -9,7 +9,7 @@ var parse = require('./url_parser')
9
9
10
10
/**
11
11
* @fileOverview The **MongoClient** class is a class that allows for making Connections to MongoDB.
12
- *
12
+ *
13
13
* @example
14
14
* var MongoClient = require('mongodb').MongoClient,
15
15
* test = require('assert');
@@ -52,7 +52,7 @@ function MongoClient() {
52
52
* @param {object } [options.mongos=null] A hash of options to set on the mongos object, see **Mongos** constructor**
53
53
* @param {MongoClient~connectCallback } callback The command result callback
54
54
* @return {null }
55
- */
55
+ */
56
56
this . connect = MongoClient . connect ;
57
57
}
58
58
@@ -74,21 +74,21 @@ function MongoClient() {
74
74
* @param {object } [options.mongos=null] A hash of options to set on the mongos object, see **Mongos** constructor**
75
75
* @param {MongoClient~connectCallback } callback The command result callback
76
76
* @return {null }
77
- */
77
+ */
78
78
MongoClient . connect = function ( url , options , callback ) {
79
79
var args = Array . prototype . slice . call ( arguments , 1 ) ;
80
80
callback = typeof args [ args . length - 1 ] == 'function' ? args . pop ( ) : null ;
81
81
options = args . length ? args . shift ( ) : null ;
82
82
options = options || { } ;
83
83
84
- // Set default empty server options
84
+ // Set default empty server options
85
85
var serverOptions = options . server || { } ;
86
86
var mongosOptions = options . mongos || { } ;
87
87
var replSetServersOptions = options . replSet || options . replSetServers || { } ;
88
88
var dbOptions = options . db || { } ;
89
89
90
90
// If callback is null throw an exception
91
- if ( callback == null )
91
+ if ( callback == null )
92
92
throw new Error ( "no callback function provided" ) ;
93
93
94
94
// Parse the string
@@ -109,10 +109,10 @@ MongoClient.connect = function(url, options, callback) {
109
109
110
110
// Merge in any replicaset server options
111
111
if ( replSetServersOptions ) {
112
- for ( var name in replSetServersOptions ) object . rs_options [ name ] = replSetServersOptions [ name ] ;
112
+ for ( var name in replSetServersOptions ) object . rs_options [ name ] = replSetServersOptions [ name ] ;
113
113
}
114
114
115
- if ( replSetServersOptions . ssl
115
+ if ( replSetServersOptions . ssl
116
116
|| replSetServersOptions . sslValidate
117
117
|| replSetServersOptions . sslCA
118
118
|| replSetServersOptions . sslCert
@@ -128,15 +128,15 @@ MongoClient.connect = function(url, options, callback) {
128
128
129
129
// Merge in any replicaset server options
130
130
if ( mongosOptions ) {
131
- for ( var name in mongosOptions ) object . mongos_options [ name ] = mongosOptions [ name ] ;
131
+ for ( var name in mongosOptions ) object . mongos_options [ name ] = mongosOptions [ name ] ;
132
132
}
133
133
134
134
if ( typeof object . server_options . poolSize == 'number' ) {
135
135
if ( ! object . mongos_options . poolSize ) object . mongos_options . poolSize = object . server_options . poolSize ;
136
136
if ( ! object . rs_options . poolSize ) object . rs_options . poolSize = object . server_options . poolSize ;
137
137
}
138
138
139
- if ( mongosOptions . ssl
139
+ if ( mongosOptions . ssl
140
140
|| mongosOptions . sslValidate
141
141
|| mongosOptions . sslCA
142
142
|| mongosOptions . sslCert
@@ -203,17 +203,17 @@ MongoClient.connect = function(url, options, callback) {
203
203
// Error
204
204
var error = null ;
205
205
// Set up the Server object
206
- var _server = object . servers [ i ] . domain_socket
206
+ var _server = object . servers [ i ] . domain_socket
207
207
? new Server ( object . servers [ i ] . domain_socket , _server_options )
208
208
: new Server ( object . servers [ i ] . host , object . servers [ i ] . port , _server_options ) ;
209
-
209
+
210
210
var setName ;
211
211
212
- var connectFunction = function ( __server ) {
212
+ var connectFunction = function ( __server ) {
213
213
// Attempt connect
214
214
new Db ( object . dbName , __server , { w :1 , native_parser :false } ) . open ( function ( err , db ) {
215
215
// Update number of servers
216
- totalNumberOfServers = totalNumberOfServers - 1 ;
216
+ totalNumberOfServers = totalNumberOfServers - 1 ;
217
217
// If no error do the correct checks
218
218
if ( ! err ) {
219
219
// Close the connection
@@ -244,27 +244,32 @@ MongoClient.connect = function(url, options, callback) {
244
244
callback ( new Error ( "cannot combine a list of replicaset seeds and mongos seeds" ) ) ;
245
245
} catch ( err ) {
246
246
throw err
247
- }
247
+ }
248
248
} )
249
249
}
250
-
251
- if ( totalNumberOfMongodServers == 0
252
- && totalNumberOfMongosServers == 0
253
- && object . servers . length == 1 ) {
250
+
251
+ if ( totalNumberOfMongodServers == 0
252
+ && totalNumberOfMongosServers == 0
253
+ && object . servers . length == 1
254
+ && ( ! object . rs_options . replicaSet || ! object . rs_options . rs_name ) ) {
254
255
var obj = object . servers [ 0 ] ;
255
- serverConfig = obj . domain_socket ?
256
+ serverConfig = obj . domain_socket ?
256
257
new Server ( obj . domain_socket , object . server_options )
257
- : new Server ( obj . host , obj . port , object . server_options ) ;
258
- } else if ( totalNumberOfMongodServers > 0 || totalNumberOfMongosServers > 0 ) {
258
+ : new Server ( obj . host , obj . port , object . server_options ) ;
259
+ } else if ( totalNumberOfMongodServers > 0
260
+ || totalNumberOfMongosServers > 0
261
+ || object . rs_options . replicaSet || object . rs_options . rs_name ) {
259
262
var finalServers = object . servers
260
263
. filter ( function ( serverObj ) {
261
264
return errorServers [ serverObj . host + ":" + serverObj . port ] == null ;
262
265
} )
263
266
. map ( function ( serverObj ) {
264
267
return new Server ( serverObj . host , serverObj . port , object . server_options ) ;
265
268
} ) ;
269
+
266
270
// Clean out any error servers
267
271
errorServers = { } ;
272
+
268
273
// Set up the final configuration
269
274
if ( totalNumberOfMongodServers > 0 ) {
270
275
try {
@@ -276,7 +281,7 @@ MongoClient.connect = function(url, options, callback) {
276
281
return callback ( err , null ) ;
277
282
}
278
283
} else {
279
- serverConfig = new Mongos ( finalServers , object . mongos_options ) ;
284
+ serverConfig = new Mongos ( finalServers , object . mongos_options ) ;
280
285
}
281
286
}
282
287
@@ -296,12 +301,12 @@ MongoClient.connect = function(url, options, callback) {
296
301
// Set up all options etc and connect to the database
297
302
_finishConnecting ( serverConfig , object , options , callback )
298
303
}
299
- } ) ;
304
+ } ) ;
300
305
}
301
306
302
307
// Wrap the context of the call
303
- connectFunction ( _server ) ;
304
- }
308
+ connectFunction ( _server ) ;
309
+ }
305
310
}
306
311
307
312
var _setNativeParser = function ( db_options ) {
@@ -345,7 +350,7 @@ var _finishConnecting = function(serverConfig, object, options, callback) {
345
350
// Set up the db options
346
351
var db = new Db ( object . dbName , serverConfig , object . db_options ) ;
347
352
// Open the db
348
- db . open ( function ( err , db ) {
353
+ db . open ( function ( err , db ) {
349
354
350
355
if ( err ) {
351
356
return process . nextTick ( function ( ) {
@@ -379,7 +384,7 @@ var _finishConnecting = function(serverConfig, object, options, callback) {
379
384
if ( success ) {
380
385
process . nextTick ( function ( ) {
381
386
try {
382
- callback ( null , db ) ;
387
+ callback ( null , db ) ;
383
388
} catch ( err ) {
384
389
if ( db ) db . close ( ) ;
385
390
throw err
@@ -400,7 +405,7 @@ var _finishConnecting = function(serverConfig, object, options, callback) {
400
405
} else {
401
406
process . nextTick ( function ( ) {
402
407
try {
403
- callback ( err , db ) ;
408
+ callback ( err , db ) ;
404
409
} catch ( err ) {
405
410
if ( db ) db . close ( ) ;
406
411
throw err
0 commit comments