UNPKG

vmagic

Version:

vMagic is a RESTFul framework for NodeJS applications.

192 lines (166 loc) 4.81 kB
"use strict"; import { N1qlQuery, Cluster } from "couchbase"; import Logger from "../Logger.js"; class Couchbase { constructor() { this.logger = new Logger(); this.bucket = null; this.Nq = null; try { this.Nq = N1qlQuery; } catch (ex) { throw new Error("Couchbase cannot be found."); } } setUp(dbConfig) { this.config = dbConfig; } /** * Get an instance bitbucket connection. * @returns {Void}. */ connect() { const that = this; const cluster = new Cluster(`couchbase://${this.config.host}:${this.config.port}?detailed_errcodes=1`); var nameBucket = null; if (this.nameBucket) { nameBucket = this.nameBucket; } else { nameBucket = this.config.bucket; } return new Promise((resolve, reject) => { this.bucket = cluster.openBucket(nameBucket, this.config.password, function (err) { if (err) { that.logger.error(err); reject(err); return; } that.logger.success("[Magic] Couchbase Connection established successfully."); resolve(); }); }); } /** * Close bitbucket connection. * @returns {Void}. */ close() { this.logger.success("[Magic] Couchbase Connection disconnected successfully."); this.bucket.close(); } setBucket(bucket) { this.nameBucket = bucket; } getBucket() { return this.bucket; } /** * Creates a new document. * @param {string} key . * @param {string} value . * @returns {Promise}. */ save(key, value) { return new Promise((resolve, reject) => this.connect().then(() => { this.bucket.insert(key, value, {}, function (err, res) { close(); if (err) { reject(err); return; } resolve(res); }); }), ); } saveMany(key, value) { return new Promise((resolve, reject) => this.connect().then(() => { this.bucket.insert(key, value, {}, function (err, res) { close(); if (err) { reject(err); return; } resolve(res); }); }), ); } /** * Update a document. * @param {string} key . * @param {string} value . * @returns {Promise}. */ update(key, value) { return new Promise((resolve, reject) => this.connect().then(() => { this.bucket.replace(key, value, {}, function (err, res) { close(); if (err) { reject(err); return; } resolve(res); }); }), ); } /** * Delete a document. * @param {string} key . * @returns {Promise}. */ delete(key) { return new Promise((resolve, reject) => this.connect().then(() => { this.bucket.remove(key, {}, function (err, res) { close(); if (err) { reject(err); return; } resolve(res); }); }), ); } /** * Get a query from N1qlQuery. * @param {string} sql . * @param {string} values . * @returns {Promise}. */ query(sql, values) { return new Promise((resolve, reject) => this.connect().then(() => { this.logger.info(`[Magic] ${sql}`); var query = this.Nq.fromString(sql).consistency(this.Nq.Consistency.REQUEST_PLUS); this.bucket.query(query, values, function (err, res) { close(); if (err) { reject(err); return; } resolve(res); }); }), ); } findById(id) { return new Promise((resolve, reject) => this.connect().then(() => { this.bucket.get(id, (err, result) => { if (err) { reject(err); return; } resolve(result); }); }), ); } } export default Couchbase;