4

Node.js で hapi.js と一緒に RethinkDB を使用しています。私のメイン アプリケーションは、open 接続を hapi.js プラグインに渡します。main-script 内で接続を使用すると正常に動作しますが、プラグイン内で何かを実行すると、次のエラーがスローされます。

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 に答える