dbHelper.js const mysql = require('mysql');// var config = require('../config');const connStr = require('../config').connStr;var execute = function (sql, params, cb) { var conn = mysql.createConnection(connStr); conn.connect(); conn.query(s
const mysql = require('mysql');
// var config = require('../config');
const connStr = require('../config').connStr;
var execute = function (sql, params, cb) {
var conn = mysql.createConnection(connStr);
conn.connect();
conn.query(sql, params, function (error, rows, result) {
if (error) {
console.error('================= executePromise error ================')
console.error('sql:', sql);
console.error('-------------------------------------------------------')
console.error(params);
console.error('-------------------------------------------------------')
console.error(error);
console.error('=======================================================')
}
cb && cb(error, rows, result);
});
conn.end();
}
var executePromise = function (sql, params) {
return new Promise((resolve, reject) => {
execute(sql, params, (err, result, status) => {
if (err) return reject(err);
resolve(result);
});
})
}
var insertPromise = function (sql, params) {
if (!(/^insert into/g.test(sql)) && typeof (params) === 'object' && !(params instanceof Array)) {
var fields = new Array();
var sqlParams = new Array();
var sqlValue = new Array();
for (var i in params) {
var v = params[i];
if (typeof (v) !== 'object') {
fields.push(i);
if (v === 'getDate()') {
sqlValue.push('UNIX_TIMESTAMP()')
} else {
sqlValue.push('?');
sqlParams.push(v);
}
}
}
sql = ['insert into `', sql, '`(`', fields.join('`,`'), '`) values(', sqlValue.join(','), ')'].join('');
params = sqlParams;
}
return new Promise((resolve, reject) => {
executePromise(sql, params)
.then(r => {
resolve(r.insertId > 0 ? r.insertId : r.affectedRows);
})
.catch(reject);
})
}
var deletePromise = function (sql, params) {
if (!(/^insert into/g.test(sql)) && params && !(params instanceof Array) && typeof (params) === 'object') {
var fields = new Array();
var sqlParams = new Array();
for (var i in params) {
var v = params[i];
if (typeof (v) === 'string') {
if (v === 'getDate()') {
fields.push(['`', i, '`=UNIX_TIMESTAMP()'].join(''))
} else {
fields.push(['`', i, '`=?'].join(''))
sqlParams.push(v);
}
}
}
sql = ['delete from `', sql, '` where ', fields.join(',')].join('');
params = sqlParams;
}
return new Promise((resolve, reject) => {
executePromise(sql, params)
.then(r => {
resolve(r.affectedRows);
})
.catch(reject);
})
}
var updatePromise = function (sql, params) {
// var reg = /^`?([^`\s]+)`?(\s+where\s+\S+)?$/g
// if (reg.test(sql) && typeof (params) === 'object' && !(params instanceof Array)) {
// console(RegExp.$1);
// return Promise.reject('yes');
// }
return new Promise((resolve, reject) => {
executePromise(sql, params)
.then(r => {
resolve(r.changedRows);
})
.catch(reject);
})
}
/**
* 查询数据
* @param {*} sql
* @param {*} params
* @param {*} top 取多少条数据
* @param {*} skip 跳过多少条数据
*/
var queryPromise = function (sql, params, top, skip) {
params = params || [];
var limit = '';
if (top && !isNaN(top)) {
sql += ' limit ?';
if (skip && !isNaN(skip)) {
sql += ',?';
params.push(skip);
}
params.push(top);
}
return executePromise(sql, params);
}
/**
* 查询并返回第一条数据
* @param {*} sql
* @param {*} params
*/
var queryFirstRowPromise = function (sql, params) {
return new Promise((resolve, reject) => {
queryPromise(sql, params, 1)
.then(rows => {
resolve(rows.length > 0 ? rows[0] : null);
}).catch(reject);
})
}
/**
* 查询并返回首行首列
* @param {*} sql
* @param {*} params
*/
var queryScalarPromise = function (sql, params) {
return new Promise((resolve, reject) => {
execute(sql, params || [], (err, rows, result) => {
if (err) return reject(err);
if (rows.length > 0)
resolve(rows[0][result[0].name]);
})
})
}
var anyPromise = function (sql, params) {
return new Promise((resolve, reject) => {
execute(sql += ' limit 1', params, (err, rows) => {
if (err) return reject(err);
resolve(rows.length > 0);
})
})
}
exports.anyPromise = anyPromise;
exports.insertPromise = insertPromise;
exports.deletePromise = deletePromise;
exports.updatePromise = updatePromise;
exports.queryPromise = queryPromise;
exports.queryFirstRowPromise = queryFirstRowPromise;
exports.queryScalarPromise = queryScalarPromise;
