【问题标题】:RethinkDB connection "must be open" but never gets closedRethinkDB 连接“必须打开”但永远不会关闭
【发布时间】:2015-11-30 00:10:32
【问题描述】:

我在 Node.js 中使用 RethinkDB 和 hapi.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 社区 on 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

谢谢!

【问题讨论】:

  • 可能是异步问题,没有被回调。我倾向于在插件中打开 db 并将句柄存储在 hapi 的内部。

标签: node.js rethinkdb hapijs rethinkdb-javascript


【解决方案1】:

发现问题:

提供的错误具有误导性。不是连接,而是 rethinkdb 模块!我在主应用程序和插件内部导入/需要它。这是同一个模块,但它的一个不同的实例。连接本身是相同的并且仍然打开。

将连接和 rethinkdb 实例传递给插件有效。将连接传递给插件并使用它们的 rethinkdb 不会。连接必须来自稍后用于从数据库中获取数据的同一实例。

【讨论】:

  • 在github.com/rethinkdb/rethinkdb/issues 上打开一个关于令人困惑的错误的问题可能会有所帮助。
  • 我正在本地机器上运行 rethinkdb,而我的代码在同一台机器上运行,根据您的评论,我无法完全修复?我用nodejs,rethinkdb lib
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2011-12-20
  • 2011-11-04
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多