You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
3.7 KiB
JavaScript

'use strict';
(function(module) {
var winston = require('winston'),
async = require('async'),
nconf = require('nconf'),
session = require('express-session'),
db,
mongoClient,
mongoStore;
module.questions = [
{
name: 'mongo:host',
description: 'Host IP or address of your MongoDB instance',
'default': nconf.get('mongo:host') || '127.0.0.1'
},
{
name: 'mongo:port',
description: 'Host port of your MongoDB instance',
'default': nconf.get('mongo:port') || 27017
},
{
name: 'mongo:username',
description: 'MongoDB username'
},
{
name: 'mongo:password',
description: 'Password of your MongoDB database',
hidden: true
},
{
name: "mongo:database",
description: "Which database to use",
'default': nconf.get('mongo:database') || 0
}
];
module.helpers = module.helpers || {};
module.helpers.mongo = require('./mongo/helpers');
module.init = function(callback) {
try {
var sessionStore;
mongoClient = require('mongodb').MongoClient;
if (!nconf.get('redis')) {
sessionStore = require('connect-mongo')({session: session});
} else {
sessionStore = require('connect-redis')(session);
}
} catch (err) {
winston.error('Unable to initialize MongoDB! Is MongoDB installed? Error :' + err.message);
process.exit();
}
mongoClient.connect('mongodb://'+ nconf.get('mongo:host') + ':' + nconf.get('mongo:port') + '/' + nconf.get('mongo:database'), function(err, _db) {
if(err) {
winston.error("NodeBB could not connect to your Mongo database. Mongo returned the following error: " + err.message);
process.exit();
}
db = _db;
module.client = db;
if (!nconf.get('redis')) {
module.sessionStore = new sessionStore({
db: db
});
} else {
module.sessionStore = new sessionStore({
client: require('./redis').connect(),
ttl: 60 * 60 * 24 * 14
});
}
require('./mongo/main')(db, module);
require('./mongo/hash')(db, module);
require('./mongo/sets')(db, module);
require('./mongo/sorted')(db, module);
require('./mongo/list')(db, module);
if(nconf.get('mongo:password') && nconf.get('mongo:username')) {
db.authenticate(nconf.get('mongo:username'), nconf.get('mongo:password'), function (err) {
if (err) {
winston.error(err.stack);
process.exit();
}
createIndices();
});
} else {
winston.warn('You have no mongo password setup!');
createIndices();
}
function createIndices() {
db.collection('objects').ensureIndex({_key :1, score: -1}, {background:true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
db.collection('objects').ensureIndex({_key :1, score: 1}, {background:true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
db.collection('objects').ensureIndex({_key :1, value: -1}, {background:true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
db.collection('objects').ensureIndex({'expireAt':1}, {expireAfterSeconds:0, background:true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
db.collection('search').ensureIndex({content:'text'}, {background:true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
db.collection('search').ensureIndex({key: 1, id: 1}, {background: true}, function(err) {
if(err) {
winston.error('Error creating index ' + err.message);
}
});
if(typeof callback === 'function') {
callback();
}
}
});
};
module.close = function() {
db.close();
};
}(exports));