0

node.jsでイベントをリッスン/起動するための最良のアプローチはどれですか? EventEmitter を使用してモデルを拡張することにより、node.js でイベントの起動とリッスンをテストしてきましたが、モデルのインスタンスがある場合にのみイベントがリッスンされるため、このアプローチが適切かどうか疑問に思っています。ノードアプリが生きている間にイベントがリッスンされるようにするにはどうすればよいですか??

eventEmitter を使用してモデルを拡張する例。

// myModel.js

var util = require('util');
var events2 = require('events').EventEmitter;
var MyModel = function() {

        events2.call(this);
        // Create a event listener
        this.on('myEvent', function(value) {
            console.log('hi!');
        });
    };

MyModel.prototype.dummyFunction = function(params) {
// just a dummy function.

}

util.inherits(MyModel, events2);
module.exports = MyModel;

編集:これに関するより明確な質問は、アプリの実行中にイベントをリッスンし、グローバル スコープ (アプリで生成されたイベントをリッスンする実行中のイベント マネージャーのようなもの) を持つ永続的なプロセスを維持する方法です。app.js にファイル myModel.js を要求する解決策はありますか? node.js では、この種のことはどのように解決されますか?

4

1 に答える 1

0

モデルのインスタンスがある場合にのみイベントがアクティブになるという意味が完全にはわかりません。イベントをリッスンして反応するものがなければ、イベントは発生しません。

そうは言っても、次のことは確かに合理的です。

util.inherits(global,EventEmitter)
global.on('myEvent',function(){
    /* do something useful */
});

これにより、次のことが可能になります。

global.emit('myEvent')

あるいは:

var ee=new EventEmitter();

ee.on('myEvent',...)

EventEmitter を適切に使用する方法については、次のように定義されています。

function EventEmitter() {}

これは初期化を提供しないため、次のことを行うだけで十分です。

var Thing=function(){};
util.inherits(Thing,EventEmitter);

Thing のインスタンスを次のように拡張します。

  • setMaxListeners(num)
  • emit(type,...)
  • addListener(type,listener)-- on() としてエイリアス
  • once(type,listener)
  • removeListener(type,listener)
  • removeAllListeners()
  • listeners(type)

考えられる唯一の「落とし穴」は、EventEmitter が独自の_eventsオブジェクト プロパティを拡張オブジェクト ( this) に追加することです。これは、予期しない動作がなければ、独自のオブジェクト プロパティに同じ名前を付けないことを示唆しています。

于 2012-10-29T19:28:59.113 に答える