2012-09-02 20 views
14

node.jsでカスタムイベントを作成する方法を知りたいので、壁に当たっています。私は、表現の仕組みやnode.jsのイベントの仕組みについて誤解しているとはかなり確信しています。Expressフレームワークを使用したNode.jsのカスタムイベント

https://creativespace.nodejitsu.comこれはアプリです。

ユーザーが新しい「アクティビティ」(何度も何度も起こる)を作成すると、POSTリクエストが送信されます。それから私のルート内で、POSTが成功すると、そのアクティビティの新しい名前空間を作成するようにsocket.ioに指示するイベントを出したいと思います。

var eventEmitter = require('events').EventEmitter;  
// Tell socket.io about the new space. 
eventEmitter.emit('new activity', {activityId: body.id}); 

そしてsocket.io:私のルートファイルで

// When someone creates a new activity 
eventEmitter.on('new activity', function (data) { // this gives and error 
    var newActivity = '/activity?' + data.activityId; 
    io.of(newActivity).on('connection', function (socket) { 

    // Socket.io code for an activity 

    }); 
}); 

だから、私が手にエラーがUNDEFINED方法にを呼び出すことはできませんされており、それは、ライン2どうなるかを指し、上記のsocket.io。私は、私の要求を台無しにしていると思います。あるいは、イベントの仕組みをよく理解していません。

Node.jsのイベントをよく読んでいても、助けてください。

ありがとうございました!

+1

アップだけで頭のようにそれを放出し、私は以来、このアプリを引き下げました。 – Costa

答えて

11

EventEmitterは、継承できるクラスとして扱う必要があります。これを試してみてください:

function MyEmitter() { 
    events.EventEmitter.call(this); 
} 

util.inherits(MyEmitter, events.EventEmitter); 

は今、あなたは、イベントを聞くと発光するように、あなたのクラスを使用することができます。

var e = new MyEmitter; 
e.on("test", function (m) { console.log(m); }); 
e.emit("test", "Hello World!"); 
+11

機能を追加する必要がない場合、 'var EventEmitter = require( 'events')。EventEmitter; var myEmitter = new EventEmitter;も同様に動作します。 –

13

使用している場合は、あなたもちょうど持つEventEmitterから継承特急「アプリ」に関するイベントをリッスンすることができます表現。たとえば:

res.app.on("myEvent", function) 

res.app.emit("myEvent", data) 
関連する問題