1

私はNode Webアプリケーションを構築しています(Expressを使用)。すべてを可能な限りDRYに保つために、リクエストごとにデータベース接続を自動的に取得しますが、それを解放する(プールに戻す)必要もあります。

すべてのルートで手動で行うこともできますが、それはコードを汚染するだけです。サーバーイベントをリッスンし、応答の生成または送信が完了したら解放する必要があると考えました。どのようなオプションがありますか? 応答が完了すると、どのイベント (およびどのオブジェクト (アプリ、要求など) 内) がトリガーされますか?

4

1 に答える 1

4

resEventEmitter から継承され、デフォルトのイベントを使用できるだけでなく、独自のイベントを発行することもできます。
したがって、最も一般的なイベントの 1 つはfinish(node.0.8.12 およびそれ以前のend) イベントです。

res.on('finish', function() {
  // request processing finished
});

必要に応じて、すべてのリクエストにそのイベントを添付することも、ルートの特定の早い段階に添付することもできます。
さらに、DB 接続を取得し、finishイベントと場合によってはタイムアウトをアタッチするミドルウェアを作成できます。そして、必要なのはそのミドルウェアをルートに追加するだけなので、繰り返しのコーディングは最小限です。

当面の間、リクエストごとに DB 接続を作成しないことをお勧めします。これはオーバーヘッドが大きく、ソケットや IO ハンドラーを不必要に使用するためです。単一の接続を自由に使用でき、パフォーマンスの観点からも効率的です。

于 2013-07-25T13:26:55.927 に答える