What will be the best way to reuse a CouchBase conneciton

I am using the following code for connecting the CouchBase

couchbase.connect(config.CouchBaseConnector, function (err, CouchBaseDB) {
    if (err) {
        throw (err)
    }
    CouchBaseDB.set(keyPush, docPush, function (err, meta) {
        if (err) { console.log(err); }
    });
  }

But its creating multiple number of connection.

Can someone help me out to fix the issue. Basically I want to do something like connection pool and keep re-using.


I came across a doc from CouchBase regarding the same. But not able to figure it out how exactly it works and the steps to deploy the same on windows 7 64-bit version.
Update:
I think moxi-server is not released for Windows OS as of now.

The Couchbase Node SDK is a Connection Pool itself. It is responsible of managing connection to the cluster, be alerted about any change in the server topology (add/remove/failed nodes)

This is why most of the time you put your code in a global callback method and reuse the connection

var express = require('express'),
driver = require('couchbase'),
routes = require('./routes');

dbConfiguration = {
"hosts": ["my-couchbase-server:8091"],
"bucket": "bucket"
}

driver.connect(dbConfiguration, function(err, cb) {
    if (err) {
        throw (err)
    }
    // put your application logic here
});

If you want to use a global variable you need to wait for the callback and be sure that the connection is established before using it.

You can use generic resource pool module for Node: node-pool

It is generic pool, so you can adapt it for your needs.

EDIT:

Here is example code:

var poolModule = require('generic-pool');
var pool = poolModule.Pool({
    name     : 'couch',
    create   : function(callback) {
       couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) {
            if (err)
                return console.log("Failed to connect to the CouchBase");
            else {
                CouchBaseDBConnection = couchbaseOpenCon
                callback(null, couchbaseOpenCon);
            }
        });
    },
    destroy  : function(client) { client.end(); },
    max      : 10,
    // specifies how long a resource can stay idle in pool before being removed
    idleTimeoutMillis : 30000,
     // if true, logs via console.log - can also be a function
    log : true 
});

// acquire connection - callback function is called once a resource becomes available
pool.acquire(function(err, client) {
    if (err) {
        // handle error - this is generally the err from your
        // factory.create function  
    }
    else {
        console.log("do whatever you want with the client ...");
        pool.release(client);
        });
    }
});

I found the following code is working for me. Please anyone has better solution please post it, I always welcome that.

GLOBAL.CouchBaseDBConnection = undefined;
function OpenCouchBase(callback) {
    if (CouchBaseDBConnection == undefined) {
        couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) {
            if (err)
                return console.log("Failed to connect to the CouchBase");
            else {
                CouchBaseDBConnection = couchbaseOpenCon
                callback(null, couchbaseOpenCon);
            }
        });
    }
    else { callback(null, CouchBaseDBConnection); }
};
module.exports.OpenPoolCouchBase = OpenCouchBase;