generator-rem-server
Version:
A generator for creating REM Servers. REM Server stands for Robert's Express & Mongo Server.
72 lines (57 loc) • 1.87 kB
JavaScript
const Mongoose = require('mongoose').Mongoose;
const mongooseTimestamp = require('mongoose-cu-timestamps');
const mongooseSoftRemove = require('mongoose-soft-remove');
const mongooseCountAndFind = require('mongoose-count-and-find');
<%- schemaRequireSrc %>
class Database {
constructor(config, logger) {
this.config = config;
this.logger = logger.child({ context: 'Database' });
this.logger.verbose('Creating mongoose instance');
this.mongoose = new Mongoose();
this.logger.verbose('Mongoose instance created');
this._setupMongoosePlugins();
this._setupMongooseModels();
}
connect(cb) {
this.logger.verbose('Connecting to database');
this.mongoose.connect(this.config.mongo.url, (err) => {
if (err) { return cb(err); }
this.logger.verbose('Connected to database');
cb(null);
});
}
disconnect(cb) {
this.logger.verbose('Disconnecting from database');
this.mongoose.disconnect((err) => {
if (err) { return cb(err); }
this.logger.verbose('Disconnected from database');
cb(null);
});
}
model(...args) {
return this.mongoose.model(...args);
}
ping(cb) {
if (!this.mongoose.connection.db) {
return cb(new Error('Not connected to database'));
}
this.mongoose.connection.db.admin().ping((err, result) => {
if (err) { return cb(err); }
cb(null, result);
});
}
_setupMongoosePlugins() {
this.logger.verbose('Attaching plugins');
this.mongoose.plugin(mongooseTimestamp);
this.mongoose.plugin(mongooseSoftRemove);
this.mongoose.plugin(mongooseCountAndFind);
this.logger.verbose('Plugins attached');
}
_setupMongooseModels() {
this.logger.verbose('Registering models');
<%- schemaSetupSrc %>
this.logger.verbose('Models registered');
}
}
module.exports = Database;