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.
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:
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.managergetConnectedBuckets()
: Returns array of connected bucketsdisconnectBucket(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
- Get doc with name
user:test
fromcustomers
bucket:
try {
const doc = await couchbasePromisesWrapper.getDoc('customers', 'user:test');
/*code*/
} catch(error) {
/*code*/
}
- Get doc with name
statistics:test
fromstats
bucket:
try {
const doc = await couchbasePromisesWrapper.getDoc('stats', 'statistics:test');
/*code*/
} catch(error) {
/*code*/
}
- Update doc with name
statistics:test
fromstats
bucket with a new object callednewTestValue
:
try {
const doc = await couchbasePromisesWrapper.upsertDoc('stats', 'statistics:test', newTestValue)
/*code*/
} catch(error) {
/*code*/
};
- Remove doc with name
statistics:test
fromstats
bucket:
try {
const doc = await couchbasePromisesWrapper.removeDoc('stats', 'statistics:test')
/*code*/
} catch(error) {
/*code*/
};
- Replace doc with name
statistics:test
fromstats
bucket with a new object callednewTestValue
:
try {
const doc = await couchbasePromisesWrapper.replaceDoc('stats', 'statistics:test', newTestValue)
/*code*/
} catch(error) {
/*code*/
};
- Add new doc with name
statistics:test
instats
bucket with value:newTestValue
:
try {
const doc = await couchbasePromisesWrapper.insertDoc('stats', 'statistics:test', newTestValue)
/*code*/
} catch(error) {
/*code*/
};
- Get list of docs(multi) with name
statistics:test1
,statistics:test2
andstatistics:test3
:
try {
const docs = await couchbasePromisesWrapper.getMultiDocs('stats', [
'statistics:test1',
'statistics:test2',
'statistics:test3',
])
/*code*/
} catch(error) {
/*code*/
};
- Make query to
stats
bucket using aview
:
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*/
});
- Make query to
stats
bucket using aN1qlQuery
:
const sqlQuery = couchbasePromisesWrapper.N1qlQuery.fromString(`
SELECT * FROM \`stats\`
WHERE type = "test";
`);
couchbasePromisesWrapper.query('stats', sqlQuery)
.then(doc => {
/*code*/
})
.catch(error => {
/*code*/
});
Give a ⭐️ if this project helped you!