$ npm install --save pool-party
- 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
var PoolParty = require('pool-party');
var db = new PoolParty({
// Options
});
type function
(Required)
Function to create new connections. Must return a connection wrapped in a {Promise}
type function
(Required)
Function to terminate connections Must return a true/false
wrapped in a {Promise}
type number
default 0
Minimum number of connections to keep open
type number
default 8
Maximum number of connection to have open
type milliseconds
default 1000 * 60 * 60
Maximum life of a connection before termination
type function
default function(){ return true; }
Function to determine if a connection is still valid
type array
default []
Array of string
method names on the {Connection} class to be "decorated". A decorated method must return a promise.
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
});
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 */});
});
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...