前提・実現したいこと
node.jsでMYSQLを操作する事を実現したいです。
1.コネクションを取得
2.SQLの実行処理
3.コネクションの接続を終了(または解放)
上記1~3までをDB共通モジュールとして記載して
呼び出し元に結果を返却をイメージしています。
※ コネクションを終了する際は返却は意識していません。
構成はNode.jsにExpressで生成した基本的な物となります。
発生している問題・エラーメッセージ
通常のコネクション作成では一応成功したのですが、
コネクションプール、プールクラスターを使った接続で
コネクションの返却の結果がundefinedの為
後続の処理で失敗します。
該当のソースコード
db.js
var mysql = require("mysql"); var config = require('config'); var express = require("express"); module.exports = { connection: null, poolCluster: null, connect: function() { this.connection = mysql.createConnection(config.get('dbConfig')); return this.connection; }, connectPool: function() { this.poolCluster = mysql.createPoolCluster(); this.poolCluster.add('MASTER', config.get('dbConfig')); this.poolCluster.add('SLAVE1', config.get('dbConfig2')); this.poolCluster.add('SLAVE2', config.get('dbConfig3')); this.poolCluster.getConnection('SLAVE*', 'RANDOM', function (connection) { console.log(con.config.database); // if(err != null){ // //失敗 // console.log('ERROR'); // console.log(err); // return; // } console.log('connected'); co = connection; return connection; }); console.log('test'); }, connectPool2: function() { // プロミスを使ったコネクション return new Promise(function(resolve, reject) { this.poolCluster = mysql.createPoolCluster(); this.poolCluster.add('MASTER', config.get('dbConfig')); this.poolCluster.add('SLAVE1', config.get('dbConfig2')); this.poolCluster.add('SLAVE2', config.get('dbConfig3')); this.poolCluster.getConnection(function (err, con) { console.log(con.config.database); if(err != null){ // 失敗 console.log('ERROR'); console.log(err); return; } console.log('connected'); resolve(con); }); console.log('test1'); }); }, errorHandler: function(err) { if (err) { throw new Error(err); } }, queryExec: function(con, query, params, callback) { var self = this; console.log(con.config.database); console.log('query exec'); con.query(query, params, function(err, rows) { self.errorHandler(err); // return rows; callback(rows); }); }, conEnd: function(con) { console.log('Connection end); // con.release(); con.end(); }, conRelease: function(con) { console.log('Connection release'); con.release(); // con.end(); } };
呼び出し元のjs
var express = require("express"); var mysql = require("../common/db2.js"); let router = express.Router(); let query = 'SELECT * FROM test; let result, con, result2, con2; let row, row2; // DB接続と取得 // 通常のコネクション接続 con = mysql.connect(); console.log('con: ' + con); mysql.queryExec(con,query,[]) .then((result) => { row = result; console.log('test: ' + row); }); mysql.conEnd(con); // コネクションプールクラスターの接続 con = mysql.connectPool(); // ここがundefined console.log('con2: ' + con2); mysql.queryExec(con,query,[]) .then((result) => { row2 = result; console.log('test2: ' + row2); }); mysql.conRelease(con); // 画面表示 router.get("/", function(req, res, next) { res.render("test", { data: row2, title: テスト' }); }); module.exports = router;
色々なサイトを調べた結果
上記の様なコードで実行しています。
まだ経験が不足している為、
何故返却結果が返ってきていないのか
ちゃんと理解していないと思っています。
理解している方にどうすればいいのか
と悩んでいます...。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/02 03:49