vmagic
Version:
vMagic is a RESTFul framework for NodeJS applications.
192 lines (166 loc) • 4.81 kB
JavaScript
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;
;