Nodejs-domain-module

提供:Dev Guides
移動先:案内検索

Node.js-ドメインモジュール

Node.js domain モジュールは、未処理のエラーをインターセプトするために使用されます。 これらの未処理のエラーは、内部バインディングまたは外部バインディングを使用してインターセプトできます。 エラーがまったく処理されない場合、単純にNodeアプリケーションがクラッシュします。

  • 内部バインディング-エラーエミッターは、ドメインのrunメソッド内でコードを実行しています。
  • 外部バインディング-エラーエミッタは、addメソッドを使用してドメインに明示的に追加されます。

このモジュールは、次の構文を使用してインポートできます。

var domain = require("domain")

ドメインモジュールのドメインクラスは、アクティブなDomainオブジェクトへのルーティングエラーとキャッチされない例外の機能を提供するために使用されます。 EventEmitterの子クラスです。 キャッチするエラーを処理するには、エラーイベントをリッスンします。 次の構文を使用して作成されます-

var domain = require("domain");
var child = domain.create();

方法

Sr.No. Method & Description
1

domain.run(function)

指定された関数をドメインのコンテキストで実行し、そのコンテキストで作成されたすべてのイベントエミッター、タイマー、および低レベルの要求を暗黙的にバインドします。 これは、ドメインを使用する最も基本的な方法です。

2

domain.add(emitter)

明示的にエミッタをドメインに追加します。 エミッターによって呼び出されたイベントハンドラーがエラーをスローした場合、またはエミッターがエラーイベントを発行した場合、暗黙的なバインディングの場合と同様に、ドメインのエラーイベントにルーティングされます。

3

domain.remove(emitter)

domain.add(emitter)の反対。 指定されたエミッターからドメイン処理を削除します。

4

domain.bind(callback)

返される関数は、提供されたコールバック関数のラッパーです。 返された関数が呼び出されると、スローされたエラーはすべてドメインのエラーイベントにルーティングされます。

5

domain.intercept(callback)

このメソッドは、domain.bind(callback)とほぼ同じです。 ただし、スローされたエラーをキャッチすることに加えて、関数の最初の引数として送信されたErrorオブジェクトもインターセプトします。

6

domain.enter()

enterメソッドは、実行、バインド、およびインターセプトメソッドがアクティブドメインを設定するために使用する配管です。 domain.activeおよびprocess.domainをドメインに設定し、ドメインモジュールによって管理されるドメインスタックにドメインを暗黙的にプッシュします(ドメインスタックの詳細については、domain.exit()を参照してください)。 enterの呼び出しは、ドメインにバインドされた非同期呼び出しとI/O操作のチェーンの始まりを区切ります。

7

domain.exit()

exitメソッドは、現在のドメインを終了し、ドメインスタックからポップします。 実行が非同期呼び出しの異なるチェーンのコンテキストに切り替わるたびに、現在のドメインが終了することを確認することが重要です。 exitの呼び出しは、ドメインにバインドされた非同期呼び出しとI/O操作のチェーンの終了または中断を区切ります。

8

domain.dispose()

破棄が呼び出されると、ドメインは、実行、バインド、またはインターセプトを介してドメインにバインドされたコールバックによって使用されなくなり、破棄イベントが発行されます

プロパティ

S.No. Property & Description
1

domain.members

ドメインに明示的に追加されたタイマーとイベントエミッターの配列。

次のコードでmain.jsという名前のjsファイルを作成します-

var EventEmitter = require("events").EventEmitter;
var domain = require("domain");

var emitter1 = new EventEmitter();

//Create a domain
var domain1 = domain.create();

domain1.on('error', function(err) {
   console.log("domain1 handled this error ("+err.message+")");
});

//Explicit binding
domain1.add(emitter1);

emitter1.on('error',function(err) {
   console.log("listener handled this error ("+err.message+")");
});

emitter1.emit('error',new Error('To be handled by listener'));
emitter1.removeAllListeners('error');
emitter1.emit('error',new Error('To be handled by domain1'));

var domain2 = domain.create();

domain2.on('error', function(err) {
   console.log("domain2 handled this error ("+err.message+")");
});

//Implicit binding
domain2.run(function() {
   var emitter2 = new EventEmitter();
   emitter2.emit('error',new Error('To be handled by domain2'));
});

domain1.remove(emitter1);
emitter1.emit('error', new Error('Converted to exception. System will crash!'));

次に、main.jsを実行して結果を確認します-

$ node main.js

出力を確認します。

listener handled this error (To be handled by listener)
domain1 handled this error (To be handled by domain1)
domain2 handled this error (To be handled by domain2)

events.js:72 throw er;//Unhandled 'error' event
         ^
Error: Converted to exception. System will crash!
   at Object. (/web/com/1427722220_30772/main.js:40:24)
   at Module._compile (module.js:456:26)
   at Object.Module._extensions..js (module.js:474:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:312:12)
   at Function.Module.runMain (module.js:497:10)
   at startup (node.js:119:16)
   at node.js:906:3