Как освободить соединение с базой данных Oracle при выходе из nodejs - PullRequest
0 голосов
/ 05 июня 2018

Я использую базу данных Oracle для моего приложения nodejs.

При изменении любой таблицы я получаю сообщение об ошибке ресурс уже используется .

Эта ошибка возникает потому, что когдаЗавершение или при выходе из приложения nodejs соединение с базой данных не освобождается или закрывается.

Я знаю, как разорвать соединение с базой данных

function doRelease() {
    db.close(
        function (err) {
            if (err)
                console.error(err.message);
        });
}

Но я не знаю, как вызвать вышеуказанную функциюна выходе nodejs или на выходе узла ??

Так что мне нужна простая помощь

как разорвать соединение БД при выходе или прекращении работы приложения nodejs

Любая помощь будет оценена

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Аналогичный вопрос по выходу nodejs находится в ссылка

       function doRelease() {
            db.close(
                function (err) {
                    if (err)
                        console.error(err.message);
                });
            console.log(`db released successfully`)
        }
        function killProcess() {
            if (process.exitTimeoutId) {
                return;
            }
            process.exitTimeoutId = setTimeout(process.exit, doRelease());
        }
        process.on('SIGTERM', killProcess);
        process.on('SIGINT', killProcess);
        process.on('uncaughtException', function (e) {
            console.log('[uncaughtException] app will be terminated: ', e.stack);
            killProcess();
        });
        console.log('Try to press CTRL+C or SIGNAL the process with PID: ', process.pid);
        process.stdin.resume();

Приведенный выше код работал для меня

0 голосов
/ 05 июня 2018

Простое решение - создать модуль базы данных с такими методами, как initialize и close.Затем вам нужно вызвать эти методы в нужное время.Мне нравится связывать их в различные события в основном модуле.

Посмотрите на части 1 и 2 в моей серии по Создание REST API с Node.js и Oracle Database для идей.

0 голосов
/ 05 июня 2018
var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : XX,
  host            : 'yourHost',
  user            : 'user',
  password        : 'password'
});

pool.getConnection(function(err, connection,) {
    connection.query( 'SELECT something FROM sometable', function(err, rows) {

//handler
      connection.release();//this is the important step

   });
});

В качестве альтернативы вы можете использовать: .query

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  //your success handler
});

pool.query() - это сокращение для pool.getConnection() + connection.query() + connection.release()

Если вы ищете что-то в обработчике выхода:

function graceExitHandler(){
// close the db connection here.
..
} 

//when nodejs app is closing
process.on('exit', exitHandler);

//on Ctrl + C interrupt
process.on('SIGINT', exitHandler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...