Create database.js

This commit is contained in:
sairajzero 2021-08-30 22:02:11 +05:30
parent a02b6d4680
commit 0161108e87

86
src/database.js Normal file
View File

@ -0,0 +1,86 @@
'use strict';
var mysql = require('mysql');
function Database(user, password, dbname, host = 'localhost') {
const db = {};
Object.defineProperty(db, "connect", {
get: () => new Promise((resolve, reject) => {
db.pool.getConnection((error, conn) => {
if (error)
reject(error);
else
resolve(conn);
});
})
});
Object.defineProperty(db, "query", {
value: (sql, values) => new Promise((resolve, reject) => {
db.connect.then(conn => {
const fn = (err, res) => {
conn.release();
(err ? reject(err) : resolve(res));
};
if (values)
conn.query(sql, values, fn);
else
conn.query(sql, fn);
}).catch(error => reject(error));
})
});
Object.defineProperty(db, "TxQuery", {
value: (queries) => new Promise((resolve, reject) => {
db.connect.then(conn => {
conn.beginTransaction((err) => {
if (err)
conn.rollback(() => {
conn.release();
reject(err);
});
else {
(function queryFn(result) {
if (!queries.length) {
conn.release();
resolve(result);
} else {
let q_i = queries.shift();
const callback = function(err, res) {
if (err)
conn.rollback(() => {
conn.release();
reject(err);
});
else {
result.push(res);
queryFn(result);
}
};
if (q_i[1])
conn.query(q_i[0], q_i[1], callback);
else
conn.query(q_i[0], callback);
}
})([]);
}
});
}).catch(error => reject(error));
})
});
return new Promise((resolve, reject) => {
db.pool = mysql.createPool({
host: host,
user: user,
password: password,
database: dbname
});
db.connect.then(conn => {
conn.release();
resolve(db);
}).catch(error => reject(error));
});
}
module.exports = Database;