4

我在 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

我在 GitHub 上询问 hapi.js 社区,是否将传递的对象作为副本传递给插件,但实际上并非如此。

这是引发错误的代码:

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

谢谢!

4

1 回答 1

4

发现问题:

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

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

于 2015-11-29T16:10:32.273 回答