kristok/node-pgq

View on GitHub
lib/db.js

Summary

Maintainability
A
3 hrs
Test Coverage
var pg = require('pg'),
    _ = require('lodash');

module.exports = function(conString) {
    var self = {
        conString: conString
    };

    self.query = function(query, params, callback) {
        // prevent typos
        if (callback && !_.isFunction(callback)) {
            throw new Error('db.query callback must be a function');
        }

        if (!_.isString(query)) {
            throw new Error('db.query is not a string');
        }

        if (!_.isArray(params)) {
            throw new Error('db.query params must be an array');
        }

        pg.connect(self.conString, function(err, client, done) {
            // could not get client from pool
            if (err) return callback(err);

            client.query(query, params, function(err, result) {
                done();
                if (callback) {
                    callback(err, result && result.rows);
                }
            });
        });
    };

    self.query.first = function(query, params, callback) {
        self.query(query, params, function(err, result) {
            callback(err, result ? result[0] : null);
        });
    };

    return self;
};