15

そこで、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

  });
});

したがって、私が得るエラーは CANNOT CALL METHOD ON OF UNDEFINED であり、上記の socket.io の 2 行目を参照しています。私は自分の要求を台無しにしていると思います.多分...またはイベントがどのように機能するかをよく理解していません.

どんな助けも、Node.js イベントに関する良い読み物への参照でさえも揺るぎないでしょう!

ありがとう!!!

4

2 に答える 2

24

エクスプレスを使用する場合は、EventEmitter から継承するエクスプレス「アプリ」でイベントをリッスンすることもできます。例えば:

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

そしてそれに放出する

res.app.emit("myEvent", data)
于 2015-06-08T07:43:14.310 に答える
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!");
于 2012-09-02T01:04:25.240 に答える