4

nodejs アプリケーションを作成していて、接続プールを使用したいと考えています。

ただし、次のアプリケーションは終了しません。connection.end()

プールの代わりに 1 つの接続を使用すると、アプリケーションは問題なく動作します。何らかの方法でプールを終了する必要がありますか?

使用ライブラリhttps ://github.com/felixge/node-mysql
node.js バージョン:Ubuntu 0.10.4

var mysql      = require('mysql');
var pool = mysql.createPool({
    host     : 'example.org',
    user     : 'myuser',
    password : 'youbet',
    database : 'notrevealingdetails',
    insecureAuth: true
});

function getCampaignData(callback)
{
    pool.getConnection(function(err, connection) {
        if(err) throw err;

        connection.query(
            'SELECT cam.id, cam.name AS campaign_name, cam.subdomain, usr.email, usr.display_name AS user_displayname ' +
            'FROM campaigns AS cam INNER JOIN users AS usr ON usr.id = cam.user_id ' +
            'WHERE cam.state=2',
            function(err, rows) {
                callback(err, rows,connection);
                //console.log('called end()');
        }); // callback function for connection.query
    }); // end pool.GetConnection
}

getCampaignData(function(err, rows, connection) {
    if (err) throw err;


    connection.end();
    console.log("I expect my app to terminate");
});
4

2 に答える 2

3

私はまったく同じ問題を抱えていましたが、ソース コード https://github.com/felixge/node-mysql/blob/master/lib/Pool.js を見ると、少なくとも現在の実装では、プールが見つかりました。すべての接続で end() を呼び出す end() メソッドがあります。

また、すべての接続が実際に終了した後 (またはエラーが発生するたび) に呼び出されるコールバック関数も受け入れます。

pool.end(function (err) {
    if (err) console.error("An error occurred: " + err);
    else console.log("My app terminated");
});
于 2013-09-09T14:48:01.240 に答える