RethinkDB连接“必须处于打开状态”,但永远不会关闭

tob*_*obi 3 node.js rethinkdb hapijs rethinkdb-javascript

我在Node.js中将RethinkDB和hapi.js一起使用。我的主应用程序将打开的连接传递给hapi.js插件。在主脚本中使用连接可以正常工作,但是在插件中运行某些操作会引发以下错误:

Unhandled rejection ReqlDriverError: First argument to `run` must be an open connection.
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚连接是否关闭,但没有其他监听器触发。

connection.addListener('connect', () => { console.log('!!connect') })
connection.addListener('close', () => { console.log('!!closed') })
connection.addListener('timeout', () => { console.log('!!timeout') })
connection.addListener('error', () => { console.log('!!error') })
Run Code Online (Sandbox Code Playgroud)

我可以确认事件列表器总体上可以正常工作,就像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) => {

    ...

})
Run Code Online (Sandbox Code Playgroud)

把它们加起来:

  • 连接应该打开,因为它永远不会关闭
  • (在插件内部:)无法从数据库获取数据,因为RethinkDB表示 First argument to 'run' must be an open connection.

有什么方法可以找出为什么连接不再打开?

RethinkDB版本:2.1.5
hapi.js版本:11.1.2

谢谢!

tob*_*obi 5

发现问题:

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

将连接和rethinkdb实例传递给插件是可行的。不将连接传递给插件并使用其rethinkdb。该连接必须与稍后用于从数据库获取数据的实例相同。