私は私の問題でできるだけ明確にしようとします。接続が切断された場合、MSSQLは接続を選択します
私はこの特定のバージョン:https://github.com/patriksimek/node-mssql/tree/v3.3.0#multiple-connectionsのmssql npmパッケージを使用しています。
私は(基礎となるLIB)退屈でMicrosoftのドキュメントのドキュメンテーションを見てきた(上記githubのリンクを参照してください)
私はgetCurrentConnection、またはgetConnectionStatusまたは類似のもののような単純な何かをする何かを見つけることができませんでした。
私はこの問題を解決する2つの方法を持っていましたが、私は両方に満足していないので、ここで尋ねています。
私の最初のアプローチは、タイムアウトを設定し、connect関数が各catch(err)で自分自身を呼び出させることでした。
2番目はミドルウェアでこれを処理することでしたが、すべて正常に動作していれば、すべての要求に対してSQLに接続し、その接続を再び閉じます。
私のミドルウェア機能:
api.use(function(err, req, res, next){
sql.close();
sql.connect(config.database).then(() => {
next();
}).catch(function(err) {
sql.close();
server.main();
});
});
PSはので、私は、可能な場合には代わりに、決算の接続をピックアップし、サーバまたは私はまだデシベルがクラッシュする場合に関して新しいものを開始したい明確にしますexcisting関数のデータがあります。
私は十分にはっきりしていました。
こんにちはアーノルド、あなたの迅速な応答をありがとう、あなたはすべての記述のものあなたが接続されているという事実を告げる。しかし、私の質問では、時には私たちのAPIがDBの前に起動することを指定します。それについてどうやって行きますか?私が指定したミドルウェア機能ではない方法ですか?だから、キャッチ(エラー)を再試行し続けるか、タイムアウトのないクリーンな方法がありますか? – Knopfler
このコードを使用すると、 'code' function getConnection(){ sql.close(); catch(function(err));sql.connect(config.database).then(sql.close(); main(); console.log( 'werkt wel'); } { sql.close(); はconsole.log( 'WERKのniet') のsetTimeout(()=> { のgetConnection()、2000年 }) })。 } 'code' そして、私はタイムアウト機能を停止するドッカーを起動してSQLサーバを起動します。ノードプロセスを再起動しても機能しますが、実行したくありません。 – Knopfler
遅れて申し訳ありませんが、IMOには、このレースの状態を解決するための2つのオプションがあります(アプリケーション起動時にDBが準備できていません)。1)アプリケーションの起動に失敗しました。それは私が通常行うことです。それでは、起動スクリプトでこの問題を扱います。私の場合、DBの準備ができていなければ、アプリを起動することは絶対にありません(!)。 2)アプリがDBをポーリングし続けるようにして、dbが準備完了になるまで続けます。それもOKですが、DBが決して準備できなくなった場合、ある時点でこれが失敗する必要があります。それはあなたが下で行ったようです。 – arnold