2016-12-15 19 views
1

NodeJSアプリケーションでエラーが発生すると、例外が発生するとサーバーがクラッシュして停止することがあります。NodeJS:エラー時にアプリケーションがクラッシュするのを防ぐ

サーバーがエラーで停止することはありませんが、代わりにエラーとエラーコードが返されるように、この状況を回避するにはどうすればよいですか。最後に、私はのために最善の解決策を見つけた BEST SOLUTION -

app.get('/articles/list', function(req, res) { 
    connection.query('select * from foo', function(err, rows, fields) { 
     if (err) throw err; 
     res.send(JSON.stringify(rows)); 
    }); 
}); 

: -

ここ EDIT

は、サーバーのクラッシュを(表fooが存在しない)を引き起こす方法であり、私: http://rowanmanning.com/posts/node-cluster-and-express/

要約すると、それはサーバーのクラスタを使用して構成されており、それが

を終了すると、サーバーを再起動します10
+0

これは少し曖昧に思えますが、常にクリティカルエリアにキャッチしてください。 – dege

答えて

0

一般的に、がすべてのエラーを処理し、未知の例外を回避するためにコード内に拒否を約束する必要があります。 約束についてtry-catch声明

を使用して::エラーについては

.catch方法を使用して

ところでノードはuncaughtExceptionsまたはunhandledRejectionイベントをインターセプトするためにあなたを許可しますが、でエラーを処理するための良い方法ではありません予測不可能な振る舞いを生み出す可能性があるため、このレベルとプログラム終了を防止します。

-1

使用すると、私は準備ができてこのarticleをお勧めしますがexpressを使用している場合は例外

try{ 
     //youre code here 
    }catch(error){ 
     console.log(error) 
    } 
1

をスローしている、あなたはこの

function clientErrorHandler (err, req, res, next) { 
    if (req.xhr) { 
     res.status(500).send({ error: 'Something failed!' }) 
    } else { 
     next(err) 
    } 
} 

app.use(clientErrorHandler); 

を使用することができ、コードの一部のために...キャッチをしてみてください、それはあなたのために多くを明確にします。 try-catchにラップされた非同期のものがあると、JFKは、非同期エラーを捕まえることに気づきます。最も一般的なエラーです。 また、

process.on("uncaughException",() => {....}) 

の使用を避けるキャッチされない例外がスローされたときに確実にそれが失敗し、pm2などのdaemonizer'sforeverとなどで再起動しpoint.Letこれであなたのプログラムを続行することはできませんので、これは、非常に悪いです

+0

ありがとうございます。私は実際にエクスプレスを使用しますが、clientErrorHandlerは私のためには機能しません(コードサンプルを挿入するために質問を編集しました)。 – hadf

+0

@hadf私は答えを更新しました。 とにかく、他の場所では処理されないエラーを再スローするだけでアプリが壊れてしまいます。 if(err){ res.status(500).send(新しいエラー(エラー)); } –

+0

ありがとう、私は私にとって最高のソリューションを見つけました。クラッシュ時にノードサーバを再起動するためにクラスタを使用することになっています – hadf

関連する問題