Мое приложение подключается к базе данных и прослушивает события, чтобы оно могло выполнять события. Если соединение с базой данных обрывается, то оно должно быть в состоянии обнаружить его с помощью consumer.db.on('error'
Соответствующая документация:
client.on ('error', (err: Error) => void) => void
Когда клиент находится в процессе подключения, отправки или отключения запроса, он будет перехватывать и пересылать сообщения об ошибках с сервера PostgreSQL на соответствующий файл client.connect client.query или client.end callback / обещание; тем не менее, клиент поддерживает долгоживущее соединение с серверной частью PostgreSQL, и из-за сетевых разделов, серверных сбоев, аварийного переключения и т. д. клиент может (и в течение достаточно длительного периода времени) в конечном итоге отключиться, пока он простаивает Чтобы справиться с этим, вы можете прикрепить прослушиватель ошибок к клиенту, чтобы перехватывать ошибки. Вот надуманный пример:
const client = new pg.Client()
client.connect()
client.on('error', (err) => {
console.error('something bad has happened!', err.stack)
})
// walk over to server, unplug network cable
// process output: 'something bad has happened!' followed by stacktrace :P
Вот мой код, пытающийся сделать то же самое:
var pg = require('pg');
// get the connection from the connection pool
pg.connect('pg://some:user@some.server', function(err, db){
// throw error
if(err) {
// handle the error - reconnect and log
}
// set database connection for global use
consumer.db = db;
// when notification received
consumer.db.on('notification', function(event){
console.log(event);
// do something with the event
});
// Detect network disruption and other errors
consumer.db.on('error', function(event){
console.log("Error!")
// handle the error - reconnect and log
});
});
Я проверил эту функцию, отключив Wi-Fi на 5 минут. Конечно, соединение разорвано, но событие ошибки не было создано, и на консоль ничего не вошло. Я также попытался закрыть удаленную базу данных с теми же результатами.
Как я могу получить сообщение об ошибке при разрыве соединения?