Пользовательские события в 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)