(_ => { // const schedule = require("node-schedule"); const mysql = require("mysql"); const read_host = (process.env.DB_READ_HOST || "").trim(); const read_port = parseInt(process.env.DB_READ_PORT || "3306") || 3306; const read_user = (process.env.DB_READ_USER || "").trim(); const read_password = (process.env.DB_READ_PASSWORD || ""); const read_database = (process.env.DB_READ_DATABASE || "").trim(); const read_charset = (process.env.DB_READ_CHARSET || "utf8mb4").trim(); const read_connection = parseInt(process.env.DB_READ_CONNECTION || "8") || 8; const write_host = (process.env.DB_WRITE_HOST || "").trim(); const write_port = parseInt(process.env.DB_WRITE_PORT || "3306") || 3306; const write_user = (process.env.DB_WRITE_USER || "").trim(); const write_password = (process.env.DB_WRITE_PASSWORD || ""); const write_database = (process.env.DB_WRITE_DATABASE || "").trim(); const write_charset = (process.env.DB_WRITE_CHARSET || "utf8mb4").trim(); const write_connection = parseInt(process.env.DB_WRITE_CONNECTION || "4") || 4; const regex_host = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; const regex_database = /^[A-Za-z]{1}[\d\w_]{0,29}$/; // let read_pool: any; // let write_pool: any; module.exports = { read: createPool({ is_read: true, host: read_host, port: read_port, user: read_user, password: read_password, database: read_database, charset: read_charset, connectionLimit: read_connection, useConnectionPooling: true }), write: createPool({ is_write: true, host: write_host, port: write_port, user: write_user, password: write_password, database: write_database, charset: write_charset, connectionLimit: write_connection, useConnectionPooling: true }), }; // const job = schedule.scheduleJob('*/30 * * * * *', function() { // if (read_pool && write_pool) { // const read_connection_now = read_pool._allConnections.length - read_pool._freeConnections.length; // const write_connection_now = write_pool._allConnections.length - write_pool._freeConnections.length; // } // }); function createPool(config: any) { let pool: any; if ( regex_host.test(config.host) && regex_database.test(config.database) && config.user.length > 0 ) { pool = mysql.createPool(config); }; // if (pool && config.is_read) { // read_pool = pool; // } // else if (pool && config.is_write) { // write_pool = pool; // }; return (sql: any, options: any, callback: any) => { if (typeof options === "function") { callback = options; options = undefined; }; if (pool == null) { callback(new Error("請檢查 .env 中的 DB_*_* 的資料是否正確。"), null, null); return; }; pool.getConnection((err: Error, connection: any) => { if (err) { callback(err, null, null); return; }; connection.query(sql, options, (err: Error, results: any, fields: any) => { if (err) { connection.rollback(() => { callback(err, null, null); connection.release(); }); return; }; connection.commit(function (err: Error) { if (err) { connection.rollback(() => { callback(err, null, null); connection.release(); }); return; }; callback(err, results, fields); connection.release(); }); }); }); }; }; })();