mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-07 16:12:53 +01:00
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const nconf = require('nconf');
|
|
|
|
const winston = require('winston');
|
|
const _ = require('lodash');
|
|
|
|
const connection = module.exports;
|
|
|
|
connection.getConnectionString = function (mongo) {
|
|
mongo = mongo || nconf.get('mongo');
|
|
let usernamePassword = '';
|
|
const uri = mongo.uri || '';
|
|
if (mongo.username && mongo.password) {
|
|
usernamePassword = `${mongo.username}:${encodeURIComponent(mongo.password)}@`;
|
|
} else if (!uri.includes('@') || !uri.slice(uri.indexOf('://') + 3, uri.indexOf('@'))) {
|
|
winston.warn('You have no mongo username/password setup!');
|
|
}
|
|
|
|
// Sensible defaults for Mongo, if not set
|
|
if (!mongo.host) {
|
|
mongo.host = '127.0.0.1';
|
|
}
|
|
if (!mongo.port) {
|
|
mongo.port = 27017;
|
|
}
|
|
const dbName = mongo.database;
|
|
if (dbName === undefined || dbName === '') {
|
|
winston.warn('You have no database name, using "nodebb"');
|
|
mongo.database = 'nodebb';
|
|
}
|
|
|
|
const hosts = mongo.host.split(',');
|
|
const ports = mongo.port.toString().split(',');
|
|
const servers = [];
|
|
|
|
for (let i = 0; i < hosts.length; i += 1) {
|
|
servers.push(`${hosts[i]}:${ports[i]}`);
|
|
}
|
|
|
|
return uri || `mongodb://${usernamePassword}${servers.join()}/${mongo.database}`;
|
|
};
|
|
|
|
connection.getConnectionOptions = function (mongo) {
|
|
mongo = mongo || nconf.get('mongo');
|
|
const connOptions = {
|
|
maxPoolSize: 20,
|
|
minPoolSize: 3,
|
|
connectTimeoutMS: 90000,
|
|
};
|
|
|
|
return _.merge(connOptions, mongo.options || {});
|
|
};
|
|
|
|
connection.connect = async function (options) {
|
|
const mongoClient = require('mongodb').MongoClient;
|
|
|
|
const connString = connection.getConnectionString(options);
|
|
const connOptions = connection.getConnectionOptions(options);
|
|
|
|
return await mongoClient.connect(connString, connOptions);
|
|
};
|