2017-03-22 05:35:45 +00:00
|
|
|
var mysql = require('mysql');
|
|
|
|
|
|
|
|
class database {
|
|
|
|
constructor() {
|
|
|
|
this._user = '';
|
|
|
|
this._password = '';
|
|
|
|
this._host = '';
|
|
|
|
this._port = 3306;
|
|
|
|
this._database = '';
|
2017-03-23 08:42:12 +00:00
|
|
|
this._socketPath = '/var/lib/mysql/mysql.sock'
|
2017-03-22 05:35:45 +00:00
|
|
|
this._con = null;
|
|
|
|
this.autoclose = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
connect() {
|
|
|
|
if (!this._user || !this._host || !this._password || !this._database) throw 'mysql connect arg is empty';
|
|
|
|
this._con = mysql.createConnection({
|
|
|
|
user: this._user,
|
|
|
|
password: this._password,
|
|
|
|
host: this._host,
|
|
|
|
database: this._database,
|
2017-03-23 08:42:12 +00:00
|
|
|
port: this._port,
|
|
|
|
socketPath: this._socketPath
|
2017-03-22 05:35:45 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
checkConnect() {
|
|
|
|
if (!this._con) {
|
|
|
|
this.connect();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
formatQuery(query, arg) {
|
|
|
|
return mysql.format(query, arg);
|
|
|
|
}
|
|
|
|
|
|
|
|
escape(val) {
|
|
|
|
return mysql.escape(val);
|
|
|
|
}
|
|
|
|
|
|
|
|
query(query, params, cb) {
|
|
|
|
this.checkConnect();
|
|
|
|
let self = this;
|
|
|
|
if (typeof params == 'function') {
|
|
|
|
cb = params;
|
|
|
|
params = [];
|
|
|
|
};
|
|
|
|
if (typeof params == 'object' && !Array.isArray(params)) params = [];
|
|
|
|
|
|
|
|
this._con.query(query, params, (err, rows, field) => {
|
|
|
|
if (self.autoclose) {
|
|
|
|
self.close(() => {
|
|
|
|
cb.apply(this, [err, rows, field]);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
cb.apply(this, [err, rows, field]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
recordPage(rows, page, maxPage) {
|
|
|
|
if (!page || !isFinite(page) || page < 1) page = 1;
|
|
|
|
|
|
|
|
let totalpage = Math.ceil(rows / maxPage);
|
|
|
|
|
|
|
|
let prevpage = page - 1;
|
|
|
|
let nextpage = page + 1;
|
|
|
|
|
|
|
|
if (prevpage < 1) prevpage = 1;
|
|
|
|
if (nextpage > totalpage) nextpage = totalpage;
|
|
|
|
|
|
|
|
let rec_start = (page - 1) * maxPage + 1
|
|
|
|
let rec_end = (rec_start + maxPage - 1);
|
|
|
|
if (rec_end > rows) rec_end = rows;
|
|
|
|
|
|
|
|
let json = {
|
|
|
|
rec_start,
|
|
|
|
rec_end,
|
|
|
|
total: rows,
|
|
|
|
prevpage,
|
|
|
|
nextpage,
|
|
|
|
totalpage,
|
|
|
|
page
|
|
|
|
};
|
|
|
|
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
close(cb) {
|
|
|
|
let self = this;
|
|
|
|
this._con.end((err) => {
|
|
|
|
self._con = null;
|
|
|
|
if (cb) cb();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
set user(str) { this._user = str; }
|
|
|
|
set host(str) { this._host = str; }
|
|
|
|
set password(str) { this._password = str; }
|
|
|
|
set port(str) { this._port = str; }
|
|
|
|
set database(str) { this._database = str; }
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = database;
|