expresser
Version:
A ready to use Node.js web app wrapper, built on top of Express.
71 lines (56 loc) • 2.7 kB
text/coffeescript
# EXPRESSER DATABASE
# -----------------------------------------------------------------------------
# Wrapper for databases. This module by itself won't do anything, as you'll
# need to add database driver plugins for your desired DB. At the moment we
# officially support MongoDB (plugin expresser-database-mongo).
# <!--
# @see settings.database
# -->
class Database
events = require "./events.coffee"
lodash = require "lodash"
logger = require "./logger.coffee"
settings = require "./settings.coffee"
# PUBLIC PROPERTIES
# --------------------------------------------------------------------------
# @property [Object] Available database drivers.
drivers: {}
# @property [Object] Dictionary of database objects.
db: {}
# INIT
# -------------------------------------------------------------------------
# Init the database module.
# @param [Object] options Database init options.
init: (options) =>
logger.debug "Database.init", options
lodash.assign settings.database, options if options?
@setEvents() if settings.events.enabled
# Bind events.
setEvents: =>
events.on "Database.register", @register
# IMPLEMENTATION
# -------------------------------------------------------------------------
# Helper to register database objects.
# @param [Object] id The ID of the database to be registered. Must be unique.
# @param [Object] driver The database driver to be used, for example mongo.
# @param [Object] connString The connection string, for example user:password@hostname/dbname.
# @param [Object] options Additional options to be passed when creating the DB connection object.
register: (id, driver, connString, options) =>
if not @drivers[driver]?
logger.error "Database.register", "The driver #{driver} is not installed! Please check if plugin expresser-database-#{driver} is available on the current environment."
return false
else
logger.debug "Database.register", id, driver, options
@db[id] = @drivers[driver].getConnection connString, options
@db[id].get = @drivers[driver].get
@db[id].insert = @drivers[driver].insert
@db[id].update = @drivers[driver].update
@db[id].remove = @drivers[driver].remove
@db[id].count = @drivers[driver].count
return @db[id]
# Singleton implementation.
# -----------------------------------------------------------------------------
Database.getInstance = ->
@instance = new Database() if not @instance?
return @instance
module.exports = exports = Database.getInstance()