6

私はrestifyとexpressの両方を使用しています。

restify では、次の方法でサーバーを作成します。

server = restify.createServer(serverSettings);

次に、次のように uncaughtException を処理できます。

server.on('uncaughtException', function(req, res, route, err) {})

process.on('uncaughtException') とは異なります。すべての uncaughtException をキャッチし、クライアントに応答できるためです。だから私は例外をキャッチするこの方法が好きです。

しかし、エクスプレスでは、このようなものを見つけることができません。

それで聞きたいのですが、エクスプレスに同じものはありますか?または、同じ機能を実装できる方法はありますか?

4

1 に答える 1

4

2014 年更新: 振り返ってみると、NodeJS ドメインは不安定で風変わりです。それらは多くのエッジケースを生成し、あまり楽しいものではありません. Promise は、エラー処理のより良いオプションである可能性があります。Bluebird や Q などの適切な Promise ライブラリは、適切なスタック トレースを生成し、Bluebird は高速です。Promise には、キャッチの安全性も保証されています。

2017年更新: 1回限りの非同期処理には必ず非同期関数を使用し、それを例外処理に使用し、例外処理に非同期イテレータなどの言語組み込みツールを使用する必要があります。コールバック スープを書く時代はとうの昔に過ぎ去りました。


ドメインを使用します。

ドメインはバージョン 0.8 で導入され、現在開発中であるため、かなり新しいものです。0.10 ではかなり安定しています。それらは、「uncaughtException」イベントへの望ましいアプローチを提供します。ドメインは推奨です:D. エクスプレスやその他の特定のフレームワークやライブラリに固有のものではありません。

一般的に言えば、ドメインを使用するとコードを分離できます。ドメインで開始するものはすべて、ドメインがそれをキャッチできるようにします。簡潔なスタック トレースを取得し、エラーが発生したときにサーバーに何をすべきかを伝えることができます。サーバーの特定の部分にドメインを使用することもできますが、例外は JS の世界では比較的コストがかかることに注意してください。

var d = domain.create();
d.on('error', function(er) {
   //your handler here    
});
d.run(function(){
    //create the server here, 
    //errors thrown will be handled by the domain handler
});

また、興味深いと思われる場合に備えて、ここに非同期例外の単純な try/catch も作成しました:)

于 2013-07-30T07:39:33.773 に答える