Как вернуть обещание, а также закрыть соединение mysql в том же коде в NodeJS - PullRequest
0 голосов
/ 20 декабря 2018

Мы хотим, чтобы наша функция возвращала обещание, а также закрывала соединение с базой данных.Наконец, мы помещаем обещание в команду try and close connection, в которой она выдает следующие ошибки:

conPool.close()  //It says  Error - conPool.close() is not a function

conPool.release() // Error - conPool.release() is not a function

conPool.releaseConnection(); // Error - Cannot read property '_pool' 
                                          of undefined

Пожалуйста, помогите мне закрыть соединение mySQL.Я хочу вернуть свои данные.Но после возврата ничего не работает, поэтому соединение не закрывается.Я боюсь, что могу потерять максимальный лимит.Я даже установил максимальное количество соединений в MySQL, но все же.И есть возможное решение, что я могу объявить conPool вне функции и заставить все функции использовать этот единственный conPool, но это также не работает.

code -

function viewChoice() {


    var sqlQuery;

        sqlQuery = "select * from TRANSACTION_PAYLOAD where INTERFACE_NAME 
     = 'Vehicle RC' AND (STATUS ='INPUT_ERROR' OR STATUS ='ERROR')";



    }


    var deferred = Q.defer();



    var host = config.host;
    var user = config.user;
    var password = config.password;
    var database = config.database;



    var conPool = mysql.createPool({
        host: host,
        user: user,
        password: password,
        database: database
    });


try{
    conPool.getConnection(function (err) {
        console.log("Inside getConnection ")
        if (err)
            deferred.reject(err.name + ': ' + err.message);

        conPool.query(sqlQuery,
            function (err, result, fields) {
                if (err) deferred.reject(err.name + ': ' + err.message);


                console.log(result);
                deferred.resolve(result);
            });
    });
    return deferred.promise;
}

finally{
    console.log("inside  Finally")
    conPool.releaseConnection();

}

}

1 Ответ

0 голосов
/ 21 декабря 2018

Из коннектора MySQL docs :

Закрытие всех соединений в пуле Когда вы закончили использовать пул, вы должны завершить все соединения или Node.jsЦикл обработки событий будет оставаться активным до тех пор, пока сервер MySQL не закроет соединения.Обычно это делается, если пул используется в сценарии или при попытке корректно завершить работу сервера.Чтобы завершить все соединения в пуле, используйте метод end в пуле:

pool.end(function (err) { // all connections in the pool have ended });

Метод end принимает необязательный обратный вызов, который можно использовать длязнать, когда все соединения завершены.

После вызова pool.end больше не могут выполняться pool.getConnection и другие операции.Подождите, пока все соединения в пуле не будут освобождены, прежде чем вызывать pool.end.Если вы используете ярлык метода pool.query, вместо pool.getConnection → connection.query → connection.release, дождитесь его завершения.

pool.end вызывает connection.end для каждого активного соединения в пуле,Это ставит в очередь пакет QUIT в соединении и устанавливает флаг, чтобы не позволять pool.getConnection создавать новые соединения.Все уже запущенные команды / запросы будут завершены, но новые команды не будут выполняться.

Кроме того, вы можете переместить return deferred.promise; внутрь finally блока

...