Пользовательские события в Node.js с помощью Express framework

Итак, я хотел бы знать, как создавать пользовательские события в node.js, и я нажимаю на стену. Я уверен, что я неправильно понимаю, как работает экспресс, и как работают 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

  });
});

Итак, ошибка, которую я получаю, НЕ МОЖЕТ ПРИВЕСТИ К МЕТОДУ OF UNDEFINED, и это относится к тому, что будет в строке 2 в socket.io выше. Я думаю, что я использую свои требования, может быть... или я не совсем понимаю, как работают события.

Любая помощь, даже ссылка на хорошее чтение на событиях node.js будет качаться!

Спасибо!!!

Ответы

Ответ 1

Вы должны рассматривать 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!");

Ответ 2

Если вы используете экспресс, вы также можете просто прослушать событие в экспресс-приложении, которое наследуется от EventEmitter. Например:

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

и испускать его, как

res.app.emit("myEvent", data)