Create database.js
This commit is contained in:
parent
a02b6d4680
commit
0161108e87
86
src/database.js
Normal file
86
src/database.js
Normal 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;
|
||||
Loading…
Reference in New Issue
Block a user