pool-party
v0.2.8
Published
Generic utility for the cool kids to handle pooled resources.
Downloads
15
Maintainers
Readme
Pool Party
Installation
$ npm install --save pool-party
Features
- Connection pooling
- Queued requests
- ES5/6 support (written in ES6, transpiled with Babel)
- Connection timeout
- Custom connection validation method
- Decorate existing connection instance with poolable requests
- High-water mark to drain connections under low load
Dive In!
var PoolParty = require('pool-party');
var db = new PoolParty({
// Options
});
Options
factory
type function
(Required)
Function to create new connections. Must return a connection wrapped in a {Promise}
destroy
type function
(Required)
Function to terminate connections Must return a true/false
wrapped in a {Promise}
min
type number
default 0
Minimum number of connections to keep open
max
type number
default 8
Maximum number of connection to have open
timeout
type milliseconds
default 1000 * 60 * 60
Maximum life of a connection before termination
validate
type function
default function(){
return true;
}
Function to determine if a connection is still valid
decorate
type array
default []
Array of string
method names on the {Connection} class to be "decorated". A decorated method must return a promise.
Dive in!
Click here to view more examples.
var PoolParty = require('pool-party');
var Promise = require('bluebird');
var jsforce = require('jsforce');
// Create a "pool" instance
var db = new PoolParty({
factory: function(){
// Create a conneciton instance
var conn = new jsforce.Connection({
loginUrl: // LOGIN_URL,
accessToken: // TOKEN
});
// Methods that aren't promisified can't be decorated
conn.query = Promise.promisify(conn.query, conn);
conn.login = Promise.promisify(conn.login, conn);
return conn.login(config.Username, config.Password + config.SecurityToken)
.then(function(){
// Return the connection, because `conn.login` doesn't
return conn;
});
},
destroy: function(conn){
return new Promise(function(resolve, reject) {
conn.logout(function(err) {
if (err) return reject(err);
resolve(true);
});
});
},
decorate: ['query','sobject'],
max: 10
});
Interact with data! Splash fight!
Returns a promise with the transaction results
// Query data!
return db.query(/* SOQL Query */); // Returns a promise with query results
// Update stuff!
return db.sobject('Account__c')
.then(function(sobject) {
return sobject.update({/* Cool account stuff */});
});
Arm Floaties
Be sure not to create multiple PoolParty instances, each instance manages the connection pool so you don't have to!
Ah, man. SalesForce peed in the pool...