0
documentationはプールの接続イベントエミッタを登録する例を示しますノードMySQLのプールClusterのイベント・エミッターが動作しない
pool.on('connection', function (connection) {
connection.query('SET SESSION auto_increment_increment=1');
});
マニュアルは、クラスタからプールを取得する方法を示しています。しかし
var pool = poolCluster.of('SLAVE*', 'RANDOM');
pool.getConnection(function (err, connection) {});
pool.getConnection(function (err, connection) {});
pool.query(function (error, results, fields) {});
、 var pool = poolCluster.of('SLAVE*', 'RANDOM');
に続いてpool.on(...)
でエラーが発生するpool.on is not a function
を登録しようとしています。クラスタを経由するはエラーなしで実行されますが、効果はありません。
TypeError: pool.on is not a function
at Object.<anonymous> (E:\scratch\scratch_server.js:14:7)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
hello from new connection
あなたが見ることができるように、pool.on('connection')
の実行に失敗し、初めて.getConnection()
のために実行しているときcluster.on('connection')
は出さない:上記のコードから
var mysql = require('mysql');
var mysql_pool_cluster = mysql.createPoolCluster();
mysql_pool_cluster.add('myPool', {user: 'root', password: 'password'});
mysql_pool_cluster.on('connection', function(new_conn) {
console.log('hello from cluster event emitter');
new_conn.release();
});
var pool = mysql_pool_cluster.of('myPool', 'ORDER');
try {
pool.on('connection', function(new_conn) {
console.log('hello from pool event emitter');
new_conn.release();
});
} catch(err) {
console.error(err);
}
console.log('');
pool.getConnection(function(err, conn) {
if (err) {
console.error(err);
} else {
console.log('hello from new connection');
conn.release();
mysql_pool_cluster.end(function(err) {
if (err) {
console.error(err);
}
});
}
});
出力を:
コードを再現します。