Как освободить соединение с базой данных Oracle при выходе из nodejs

1

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

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

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

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

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

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

Поэтому мне нужна простая помощь

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

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

  • 0
    stackoverflow.com/questions/14031763/… эта ссылка содержит пример того, как обрабатывать различные сигналы закрытия / выхода, которые может получить процесс, и как вызывать функцию перед их обработкой. Вы можете закрыть соединение с БД там

3 ответа

0
Лучший ответ

Аналогичный вопрос на выходе 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

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

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

0
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);
  • 0
    я использую оракул дб не mysql
  • 0
    я знаю, как подключиться и освободить, но мой вопрос заключается в том, как освободить БД на выходе из узлаjs или прекратить ctrl + c
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню