web-dev-qa-db-ja.com

NodeJSとExpressを使用してMySQL接続プールを作成するにはどうすればよいですか?

次のようなMySQL接続を作成できます。

var mysql      = require('mysql');
var connection = mysql.createConnection({
    Host     : 'localhost',
    user     : 'me',
    password : 'secret',
    database : 'my_db'
});

connection.connect();

しかし、プールを開始し、プロジェクト全体で使用したいと思います。

12
Utkarsh Kaushik

将来的に誰かを助けるために、これは私のために働いた:

プールを含むmysqlコネクタファイルを作成しました。

// Load module
var mysql = require('mysql');
// Initialize pool
var pool      =    mysql.createPool({
    connectionLimit : 10,
    Host     : '127.0.0.1',
    user     : 'root',
    password : 'root',
    database : 'db_name',
    debug    :  false
});    
module.exports = pool;

後でコネクタを別のファイルに含めるだけで、manageDB.jsを呼び出すことができます。

var pool = require('./mysqlConnector');

そして、次のような呼び出し可能なメソッドを作成しました:

exports.executeQuery=function(query,callback){
    pool.getConnection(function(err,connection){
        if (err) {
          connection.release();
          throw err;
        }   
        connection.query(query,function(err,rows){
            connection.release();
            if(!err) {
                callback(null, {rows: rows});
            }           
        });
        connection.on('error', function(err) {      
              throw err;
              return;     
        });
    });
}
19
Utkarsh Kaushik

tkarsh Kaushik solution にはいくつかのバグがあります:

  • (err)の場合、接続を解放できません。 connection.release();

  • そして、エラーがある場合、次のステートメント.query常にエラーが発生して実行され、アプリがクラッシュします。

  • クエリは成功しても結果がnullの場合、この場合、結果がnullであるかどうかを確認する必要があります。

私の場合、このソリューションはうまくいきました。

exports.getPosts=function(callback){
    pool.getConnection(function(err,connection){
        if (err) {
          callback(true);
          return;
        }
        connection.query(query,function(err,results){
            connection.release();
            if(!err) {
                callback(false, {rows: results});
            }
            // check null for results here
        });
        connection.on('error', function(err) {
              callback(true);
              return;
        });
    });
};
7
Nam Le

接続ファイルを作成できます。dbcon.js

var mysql = require('mysql');

// connect to the db
dbConnectionInfo = {
  Host: "localhost",
  port: "3306",
  user: "root",
  password: "root",
  connectionLimit: 5, //mysql connection pool length
  database: "db_name"
};

//For mysql single connection
/* var dbconnection = mysql.createConnection(
        dbConnectionInfo
); 

 dbconnection.connect(function (err) {
    if (!err) {
        console.log("Database is connected ... nn");
    } else {
        console.log("Error connecting database ... nn");
    }
}); 

*/

//create mysql connection pool
var dbconnection = mysql.createPool(
  dbConnectionInfo
);

// Attempt to catch disconnects 
dbconnection.on('connection', function (connection) {
  console.log('DB Connection established');

  connection.on('error', function (err) {
    console.error(new Date(), 'MySQL error', err.code);
  });
  connection.on('close', function (err) {
    console.error(new Date(), 'MySQL close', err);
  });

});


module.exports = dbconnection;

この接続を別のファイルに含める

var dbconnection = require('../dbcon');
dbconnection.query(query, params, function (error, results, fields) {
    //Do your stuff
});
4
sumitjainjr