RethinkDB 连接 "must be open" 但从未关闭
RethinkDB connection "must be open" but never gets closed
我在 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
谢谢!
发现问题:
提供的错误具有误导性。不是连接,是rethinkdb模块!我 import/require 它在主应用程序和插件内部。它是相同的模块,但它的不同实例。连接本身是相同的并且仍然打开。
将连接和 rethinkdb 实例传递给插件有效。将连接传递给插件并使用它们的 rethinkdb 不会。连接必须来自与稍后用于从数据库获取数据的相同实例。
我在 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
谢谢!
发现问题:
提供的错误具有误导性。不是连接,是rethinkdb模块!我 import/require 它在主应用程序和插件内部。它是相同的模块,但它的不同实例。连接本身是相同的并且仍然打开。
将连接和 rethinkdb 实例传递给插件有效。将连接传递给插件并使用它们的 rethinkdb 不会。连接必须来自与稍后用于从数据库获取数据的相同实例。