Соединение с RethinkDB должно быть открыто, но никогда не закрывается

Я использую RethinkDB вместе с hapi.js в Node.js. Мое основное приложение передает открытое соединение с плагином hapi.js. Использование соединения внутри основного скрипта работает нормально, но запуск чего-то внутри плагина вызывает следующую ошибку:

Unhandled rejection ReqlDriverError: First argument to `run` must be an open connection.

Я попытался выяснить, закрывается ли соединение, но ни один из добавленных слушателей не срабатывает.

connection.addListener('connect', () => { console.log('!!connect') })
connection.addListener('close', () => { console.log('!!closed') })
connection.addListener('timeout', () => { console.log('!!timeout') })
connection.addListener('error', () => { console.log('!!error') })

Я могу подтвердить, что списки событий работают в целом, так как вызов connection.close() вручную выводит !!closed.

Я спросил сообщество hapi.js на GitHub, будет ли переданный объект передан плагинам как копия, но на самом деле это не так.

Вот код, выдающий ошибку:

console.log(server.root.app.connection) // {…} === connection
console.log(server.root.app.connection.open) // true

r.table('records').group('siteLocation').count().run(server.root.app.connection, (err, cursor) => {

    ...

})

Подвести итог:

  • Соединение должно быть открытым, так как оно никогда не закрывается
  • (Внутри плагина :) Невозможно получить данные из базы данных, поскольку RethinkDB сообщает, что First argument to 'run' must be an open connection.

Есть ли способ узнать, почему соединение больше не открыто?

RethinkDB версия: 2.1.5
hapi.js версия: 11.1.2

Спасибо!


person tobi    schedule 28.11.2015    source источник
comment
Может быть, проблема с асинхронностью, и вам не перезвонили. Я обычно открываю db в плагине и храню дескриптор внутри hapi.   -  person simon-p-r    schedule 28.11.2015


Ответы (1)


Нашел проблему:

Представленная ошибка вводит в заблуждение. Дело не в связи, а в модуле rethinkdb! Я импортирую / требую это в основном приложении и внутри плагинов. Это тот же модуль, но другой его экземпляр. Само соединение такое же и все еще открытое.

Передача подключения И экземпляра rethinkdb плагинам работает. Передача подключения к плагинам и использование их rethinkdb - нет. Соединение должно быть от того же экземпляра, который позже будет использоваться для получения данных из базы данных.

person tobi    schedule 29.11.2015