2016-09-01 7 views
1

MySQLのMySQLを使用して別のファイルへの接続を作成したいと考えています。私は、クエリをトリガするたびに接続変数またはプール変数をエクスポートすることを期待しています。現在の方法では、別のファイルを分けると、毎回接続が再作成されます。NPM MySql接続を別ファイルにする必要があります

//connection.js

'use strict'; 
var mysql   = require('mysql'); 
var sys    = require('util'); 
var exec    = require('child_process').exec; 
var config   = require('config'); 
var db_config  = { 
    host    : config.get('databaseSettings.db_host'), 
    user    : config.get('databaseSettings.db_user'), 
    password   : config.get('databaseSettings.db_password'), 
    database   : config.get('databaseSettings.database'), 
    port    : config.get('databaseSettings.mysqlPORT'), 
    multipleStatements: true, 
    debug    : ['ComQueryPacket'] 
}; 
var restart   = function (callback) { 
    console.log('RESTART THE SERVER'); 
    callback(); 
    //exec("whoami; pm2 restart dashboard;", callback); 
}; 
var handleDisconnect = function() { 
    connection = mysql.createConnection(db_config); 
    console.log('\n\n\t--In the handleDisconnect from connection to DB\n'); 
    connection.connect(function (err) { 
     if (err) { 
      console.log('--DB CONNECTION ERROR - '); 
      setTimeout(handleDisconnect, 2000); 
     } else { 
      console.log('connection variable created '); 
     } 
    }); 
    connection.on('error', function (err) { 
     console.log('--DB CONNECTION ERROR - '); 
     switch (err.code) { 
      case 'PROTOCOL_CONNECTION_LOST': 
       handleDisconnect(); 
       break; 
      case 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR': 
       restart(); 
       break; 
      default: 
       throw err; 
     } 
    }); 
}; 
handleDisconnect(); 

このように、私は、このファイルからの接続/プール接続をエクスポートします。

+0

NPMのことを聞いたことはありません。 MySQLの接続性を説明しているWebページを教えてください。 –

+0

https://www.npmjs.com/package/mysql – Sankalp

答えて

1

connection.js

var mysql = require('mysql'); 
var db_config = { 
    //... 
    connectTimeout: 10000 //The milliseconds before a timeout occurs during 
         //the initial connection to the MySQL server. 
}; 
var pool = mysql.createPool(db_config); 

pool.getConnection(function(err, connection) { 
    // connected! (unless `err` is set) 
}); 

pool.on('error', function(err) { 
    console.log(err.code); // 'ER_BAD_DB_ERROR' 
    // https://www.npmjs.com/package/mysql#error-handling 
}); 

module.exports = pool; 

otherfile.js

var db = require('./connection.js'); // db is pool 

db.query('SELECT 12 AS number', function(err, rows, fields) { 
    if (err) throw err; 

    console.log('The number is: ', rows[0].solution); 
}); 
+0

db-connectionが失敗した場合に再帰的に再接続する方法私はサンプルコードで実装しようとしました。 – Sankalp

+0

@Sankalp 'connectTimeout'設定を変更するか、' pool.on( 'error'、...) 'を使って再接続してください。 –

0

一般的に、呼び出し元のnode.jsモジュールの存続期間中に1つの接続を保持する必要があります。つまり、あなたのvar mysqlにハングアップし、モジュールが終了するまで(またはそれがもう必要ないとわかるまで)それを再利用してください。

あなたは「プール」を持っている可能性がありますが、あなたがそれを必要とするまでそれをしないことをお勧めします。プールを作成する場合は、connectionLimitに10を指定します。それは問題ではないほど小さいです。それ以上のものを必要とすることは、おそらく他の場所での非効率性を示すでしょう。 (一般的な問題は、クエリのための良好な指標の欠如である。)

関連する問題