Я использую базу данных oracle для моего приложения nodejs.
При изменении любой таблицы, я получаю уже доступный ресурс ошибки.
Эта ошибка возникает из-за того, что при завершении или при выходе из приложения nodejs соединение с базой данных не освобождается или не закрывается.
Я знаю, как освободить соединение с базой данных
function doRelease() {
db.close(
function (err) {
if (err)
console.error(err.message);
});
}
Но я не знаю, как вызвать вышеуказанную функцию на выходе nodejs или завершение узла?
Поэтому мне нужна простая помощь
как освободить соединение db при выходе или завершении приложения nodejs
Любая помощь будет оценена
Аналогичный вопрос на выходе 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();
Вышеприведенный код работал для меня
Простое решение - создать модуль базы данных с такими методами, как initialize
и close
. Затем вам нужно вызвать эти методы в нужное время. Мне нравится привязывать их к различным событиям в основном модуле.
Взгляните на части 1 и 2 в моей серии о создании REST API с Node.js и Oracle Database для идей.
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);