UNPKG

@barchart/common-node-js

Version:

Common classes, utilities, and functions for building Node.js servers

82 lines (64 loc) 2.06 kB
const log4js = require('log4js'), mysql = require('mysql'); const promise = require('@barchart/common-js/lang/promise'); const Client = require('./Client'), ClientProvider = require('./ClientProvider'); module.exports = (() => { 'use strict'; const logger = log4js.getLogger('common-node/database/mysql/DirectClientProvider'); /** * A MySQL {@link ClientProvider} which uses a dedicated, individual connections. * * @public * @extends {ClientProvider} * @param {String} host * @param {String} database * @param {String} username * @param {String} password * @param {Number=} port * @param {String=} applicationName * @param {String=} charset */ class DirectClientProvider extends ClientProvider { constructor(host, database, username, password, port, applicationName, charset) { super(host, database, username, password, port, applicationName, charset); } _getClient() { return promise.build((resolveCallback, rejectCallback) => { const configuration = this.getConfiguration(); const connection = mysql.createConnection(configuration); logger.debug('Connecting new [DirectClient] to [', configuration.host, '] [', configuration.database, ']'); connection.connect((e) => { if (e) { logger.error('Failed to connect [DirectClient] to [', configuration.host, '] [', configuration.database, ']', e); rejectCallback(e); } else { const client = new DirectClient(connection); logger.info('Connected new [DirectClient] [', client.id, '] to [', configuration.host, '] [', configuration.database, ']'); resolveCallback(client); } }); }); } _onDispose() { return; } toString() { return '[DirectClientProvider]'; } } class DirectClient extends Client { constructor(connection) { super(connection, {}); } _onDispose() { this._connection.end(); this._connection = null; logger.info('Disposed [DirectClient] [', this.id, ']'); } toString() { return '[DirectClient]'; } } return DirectClientProvider; })();