Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js “重新设计数据库连接”;“必须是开放的”;但永远不会关闭_Node.js_Rethinkdb_Hapijs_Rethinkdb Javascript - Fatal编程技术网

Node.js “重新设计数据库连接”;“必须是开放的”;但永远不会关闭

Node.js “重新设计数据库连接”;“必须是开放的”;但永远不会关闭,node.js,rethinkdb,hapijs,rethinkdb-javascript,Node.js,Rethinkdb,Hapijs,Rethinkdb Javascript,我正在Node.js中与hapi.js一起使用RejectionDB。我的主应用程序将打开的连接传递给一个hapi.js插件。在主脚本中使用连接可以正常工作,但在插件中运行某些东西会引发以下错误: Unhandled rejection ReqlDriverError: First argument to `run` must be an open connection. 我试图弄清楚连接是否被关闭,但添加的侦听器中没有一个被触发 connection.addListener('connect

我正在Node.js中与hapi.js一起使用RejectionDB。我的主应用程序将打开的连接传递给一个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()
手动输出
时正常工作!!关闭

我问过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) => {

    ...

})
总而言之:

  • 连接应该打开,因为它永远不会关闭
  • (插件内部:)无法从数据库中获取数据,因为RejectionDB说“run”的第一个参数必须是打开的连接。
有没有办法找出为什么连接不再打开

数据库版本:2.1.5
hapi.js版本:11.1.2

谢谢

找到了问题:

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


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

可能是异步问题,没有被回调。我倾向于在插件中打开db,并将句柄存储在hapi的内部。这可能有助于在中打开一个关于混淆错误的问题。我在本地计算机中运行RejectionDB,在同一台计算机中运行我的代码,关于你的评论,我没有得到确切的修复?我使用nodejs和db-lib