Skip to content

Couchbase-server-promises library wraps couchbase's callback functions for handling the result of the asynchronous operations, with Bluebird promises to provide a convenient, promise-based interface.

Notifications You must be signed in to change notification settings

eldimious/couchbase-server-promises

Repository files navigation

couchbase-server-promises

A promise-based asynchronous library for Couchbase and node.js.

The Official Couchbase Node.js Client Library provides only callback functions to handle the result of the asynchronous operations. This couchbase-server-promises library wraps those callback functions with Bluebird promises to provide a convenient, promise-based interface.

Usage

First, install couchbase-server-promises as a dependency:

npm install --save couchbase-server-promises

In order to init it, you should use a config. The config should have a structure like this:

const config = {
  cluster: [ 'couchbase://127.0.0.1:8091' ],
  buckets: [
    {
      bucket: 'customers',
    },
    {
      bucket: 'stats',
    }, 
    {
      bucket: 'users'
    }
  ],
  user: 'testUser',
  password: 'testPassword',
};

as buckets we add all couchbase's bucket(name&password(password is not required)), that we have in our cluster. Also you can specify multiple hosts(clusters) in the connection string(cluster's array in config). To specify multiple hosts, separate them using a comma, for example: cluster: [couchbase://127.0.0.1:8091,couchbase://127.0.0.1:8092]. Also, you can specify operationTimeout for each bucket(not required).

Then, reference it in your code file:

const couchbasePromisesWrapper = require('couchbase-server-promises')(config);

Use the methods of the couchbasePromisesWrapper class to manage documents stored in your Couchbase database directly by their document identifiers:

Exported Methods:

  • getDoc(bucket, docId)
  • upsertDoc(bucket, docId, newDoc)
  • insertDoc(bucket, docId, newDoc)
  • replaceDoc(bucket, docId, newDoc)
  • removeDoc(bucket, docId)
  • getMultiDocs(bucket, [ docIds ])
  • query(bucket, query)
  • getBucketManager(bucket): Returns bucket.manager
  • getConnectedBuckets(): Returns array of connected buckets
  • disconnectBucket(bucket): Disconnects from bucket

where: bucket: is the name of bucket we want to manage doc, docId: is the doc's name we want to manage, newDoc: is the doc's struct that we want to store in docId

Example

  1. Get doc with name user:test from customers bucket:
try {
  const doc = await couchbasePromisesWrapper.getDoc('customers', 'user:test');
  /*code*/
} catch(error) {
  /*code*/
}
  1. Get doc with name statistics:test from stats bucket:
try {
  const doc = await couchbasePromisesWrapper.getDoc('stats', 'statistics:test');
  /*code*/
} catch(error) {
  /*code*/
}
  1. Update doc with name statistics:test from stats bucket with a new object called newTestValue:
try {
  const doc = await couchbasePromisesWrapper.upsertDoc('stats', 'statistics:test', newTestValue)
  /*code*/
} catch(error) {
  /*code*/
};
  1. Remove doc with name statistics:test from stats bucket:
try {
  const doc = await couchbasePromisesWrapper.removeDoc('stats', 'statistics:test')
  /*code*/
} catch(error) {
  /*code*/
};
  1. Replace doc with name statistics:test from stats bucket with a new object called newTestValue:
try {
  const doc = await couchbasePromisesWrapper.replaceDoc('stats', 'statistics:test', newTestValue)
  /*code*/
} catch(error) {
  /*code*/
};
  1. Add new doc with name statistics:test in stats bucket with value: newTestValue:
try {
  const doc = await couchbasePromisesWrapper.insertDoc('stats', 'statistics:test', newTestValue)
  /*code*/
} catch(error) {
  /*code*/
};
  1. Get list of docs(multi) with name statistics:test1, statistics:test2 and statistics:test3:
try {
  const docs = await couchbasePromisesWrapper.getMultiDocs('stats', [
    'statistics:test1',
    'statistics:test2',
    'statistics:test3',
  ])
  /*code*/
} catch(error) {
  /*code*/
};
  1. Make query to stats bucket using a view:
const view = couchbasePromisesWrapper.ViewQuery
  .from('testView', 'test')
  .range(startkey, endkey)
  .order(order)
  .reduce(false)
  .limit(24)
  .skip(10);
  
couchbasePromisesWrapper.query('stats', view)
.then(doc => {
  /*code*/
})
.catch(error => {
  /*code*/
});
  1. Make query to stats bucket using a N1qlQuery:
const sqlQuery = couchbasePromisesWrapper.N1qlQuery.fromString(`
  SELECT * FROM \`stats\`
  WHERE type = "test";
`);
  
couchbasePromisesWrapper.query('stats', sqlQuery)
.then(doc => {
  /*code*/
})
.catch(error => {
  /*code*/
});

Show your support

Give a ⭐️ if this project helped you!

About

Couchbase-server-promises library wraps couchbase's callback functions for handling the result of the asynchronous operations, with Bluebird promises to provide a convenient, promise-based interface.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published