const mysql = require('mysql');
const dbconfig = {}
const createPorxy = (obj) => {
return new Proxy(obj, {
get: function(target, key) {
if (typeof target[key] == 'function') {
return function() {
let args = arguments;
return new Promise(function(r, j) {
const start = Date.now()
target[key].apply(target, [...args, function(err, res) {
if (err) {
if(key === 'query') console.log('query cost', Date.now() - start, 'ms', args[0], args[1]? JSON.stringify(args[1]): '', err || '')
j(err)
} else {
if(key === 'query') console.log('query cost', Date.now() - start, 'ms',args[0], args[1]? JSON.stringify(args[1]): '', 'ok', '')
r(res)
}
}])
})
}
} else {
return target[key]
}
},
})
}
function enhancePool(dbConfig) {
let pool = mysql.createPool(dbConfig)
return createPorxy(pool)
}
async function enhanceConnection() {
let connection = await dbPool.getConnection()
return createPorxy(connection)
}
const dbPool = enhancePool(dbConfig)
module.exports = {
db: dbPool,
getConnection: enhanceConnection
}