Приложение не завершается с пулом MySQL

Я пишу приложение nodejs и хочу использовать пул соединений.

Однако следующее приложение не завершается, хотя я ожидаю, что оно завершится после вызова connection.end()

Приложение работает просто отлично, если я использую одно соединение вместо пула. Нужно ли каким-то образом завершать работу пула?

Используемая библиотека: https://github.com/felixge/node-mysql
версия node.js: 0.10.4 в Ubuntu

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");
});

person yas4891    schedule 24.05.2013    source источник
comment
Попробуйте вместо этого использовать connection.destroy()   -  person spotirca    schedule 25.05.2013
comment
@spotirca connection.destroy() (согласно документации) разорвет соединение. Если я это сделаю, в первую очередь нет смысла использовать пул, верно? (Но это работает)   -  person yas4891    schedule 25.05.2013
comment
И под этим я подразумеваю: приложение завершает работу. Я все еще хотел бы, чтобы пул работал   -  person yas4891    schedule 25.05.2013


Ответы (2)


У меня была такая же проблема, но я смотрел на исходный код 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");
});
person saverio.caminiti    schedule 09.09.2013

я хотел бы использовать

getCampaignData(function(err, rows, connection)
{
    if (err) throw err;
    connection.release();
    console.log("I expect my app to terminate");
});
person Kalmh    schedule 09.10.2014