Skip to content
Snippets Groups Projects
index.js 1.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hossam Fares's avatar
    Hossam Fares committed
    /* jshint strict: true */
    
    'use strict';
    
    var Promise = require('bluebird'),
      mysql = require('mysql2'),
      instances = {};
    
    function DB() {
      this.pool = null;
    }
    
    /**
     * Setup the Database connection pool for this instance
     * @param  {Object} config
     */
    DB.prototype.configure = function (config) {
      this.pool = mysql.createPool(config);
    };
    
    /**
     * Run DB query
     * @param  {String} query
     * @param  {Object} [params]
     * @return {Promise}
     */
    DB.prototype.query = function (query, params) {
      var defer = Promise.defer();
      params = params || {};
    
      this.pool.getConnection(function (err, con) {
        if (err) {
          if (con) {
            con.release();
          }
          return defer.reject(err);
        }
    
        con.query(query, params, function (err) {
          if (err) {
            if (con) {
              con.release();
            }
            return defer.reject(err);
          }
          defer.resolve([].splice.call(arguments, 1));
          con.release();
        });
      });
      return defer.promise;
    };
    
    /**
     * Run DB execute
     * @param  {String} query
     * @param  {Object} [params]
     * @return {Promise}
     */
    DB.prototype.execute = function (query, params) {
      var defer = Promise.defer();
      params = params || {};
    
      this.pool.getConnection(function (err, con) {
        if (err) {
          if (con) {
            con.release();
          }
          return defer.reject(err);
        }
    
        con.execute(query, params, function (err) {
          if (err) {
            if (con) {
              con.release();
            }
            return defer.reject(err);
          }
          defer.resolve([].splice.call(arguments, 1));
          con.release();
        });
      });
      return defer.promise;
    };
    
    module.exports = function (name) {
      name = name || '_default_';
      if (!instances[name]) {
        instances[name] = new DB();
      }
      return instances[name];
    };