something is working
This commit is contained in:
+85
@@ -0,0 +1,85 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.connect = void 0;
|
||||
const connection_string_1 = require("../connection_string");
|
||||
const constants_1 = require("../constants");
|
||||
const error_1 = require("../error");
|
||||
const topology_1 = require("../sdam/topology");
|
||||
function connect(mongoClient, options, callback) {
|
||||
if (!callback) {
|
||||
throw new error_1.MongoInvalidArgumentError('Callback function must be provided');
|
||||
}
|
||||
// If a connection already been established, we can terminate early
|
||||
if (mongoClient.topology && mongoClient.topology.isConnected()) {
|
||||
return callback(undefined, mongoClient);
|
||||
}
|
||||
const logger = mongoClient.logger;
|
||||
const connectCallback = err => {
|
||||
const warningMessage = 'seed list contains no mongos proxies, replicaset connections requires ' +
|
||||
'the parameter replicaSet to be supplied in the URI or options object, ' +
|
||||
'mongodb://server:port/db?replicaSet=name';
|
||||
if (err && err.message === 'no mongos proxies found in seed list') {
|
||||
if (logger.isWarn()) {
|
||||
logger.warn(warningMessage);
|
||||
}
|
||||
// Return a more specific error message for MongoClient.connect
|
||||
// TODO(NODE-3483)
|
||||
return callback(new error_1.MongoRuntimeError(warningMessage));
|
||||
}
|
||||
callback(err, mongoClient);
|
||||
};
|
||||
if (typeof options.srvHost === 'string') {
|
||||
return (0, connection_string_1.resolveSRVRecord)(options, (err, hosts) => {
|
||||
if (err || !hosts)
|
||||
return callback(err);
|
||||
for (const [index, host] of hosts.entries()) {
|
||||
options.hosts[index] = host;
|
||||
}
|
||||
return createTopology(mongoClient, options, connectCallback);
|
||||
});
|
||||
}
|
||||
return createTopology(mongoClient, options, connectCallback);
|
||||
}
|
||||
exports.connect = connect;
|
||||
function createTopology(mongoClient, options, callback) {
|
||||
// Create the topology
|
||||
const topology = new topology_1.Topology(options.hosts, options);
|
||||
// Events can be emitted before initialization is complete so we have to
|
||||
// save the reference to the topology on the client ASAP if the event handlers need to access it
|
||||
mongoClient.topology = topology;
|
||||
topology.client = mongoClient;
|
||||
topology.once(topology_1.Topology.OPEN, () => mongoClient.emit('open', mongoClient));
|
||||
for (const event of constants_1.MONGO_CLIENT_EVENTS) {
|
||||
topology.on(event, (...args) => mongoClient.emit(event, ...args));
|
||||
}
|
||||
// initialize CSFLE if requested
|
||||
if (mongoClient.autoEncrypter) {
|
||||
mongoClient.autoEncrypter.init(err => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
topology.connect(options, err => {
|
||||
if (err) {
|
||||
topology.close({ force: true });
|
||||
return callback(err);
|
||||
}
|
||||
options.encrypter.connectInternalClient(error => {
|
||||
if (error)
|
||||
return callback(error);
|
||||
callback(undefined, topology);
|
||||
});
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
// otherwise connect normally
|
||||
topology.connect(options, err => {
|
||||
if (err) {
|
||||
topology.close({ force: true });
|
||||
return callback(err);
|
||||
}
|
||||
callback(undefined, topology);
|
||||
return;
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=connect.js.map
|
||||
Reference in New Issue
Block a user