2012-09-02 28 views
14

Vì vậy, tôi muốn biết cách tạo sự kiện tùy chỉnh trong node.js và tôi đang nhấn vào một bức tường. Tôi khá chắc chắn rằng tôi hiểu lầm về cách thức hoạt động của Express và cách các sự kiện node.js hoạt động.Sự kiện tùy chỉnh trong Node.js với khung Express

https://creativespace.nodejitsu.com Đó là ứng dụng.

Khi người dùng tạo "hoạt động" mới (điều gì đó sẽ xảy ra nhiều lần) họ sẽ gửi yêu cầu POST. Sau đó, trong tuyến đường của tôi, nếu POST đó thành công tôi muốn phát ra một sự kiện, điều đó nói với socket.io tạo một không gian tên mới cho hoạt động đó.

Trong tập tin tuyến đường của tôi:

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

Và 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 

    }); 
}); 

Vì vậy, các lỗi tôi nhận được là KHÔNG THỂ GỌI CHO PHƯƠNG PHÁP VỀ CÁC UNDEFINED và nó đề cập đến những gì sẽ là dòng 2 trong socket.io ở trên. Tôi nghĩ rằng tôi đang làm rối tung các yêu cầu của mình, có thể ... hoặc tôi không hoàn toàn hiểu được sự kiện hoạt động như thế nào.

Bất kỳ trợ giúp nào, thậm chí là tham chiếu đến việc đọc tốt trên các sự kiện Node.js sẽ làm rung chuyển!

Xin cảm ơn !!!

+1

Chỉ cần một người đứng đầu lên, tôi đã từ kéo ứng dụng này xuống. – Costa

Trả lời

11

Bạn nên coi EventEmitter là lớp mà bạn có thể kế thừa từ đó. Hãy thử điều này:

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

util.inherits(MyEmitter, events.EventEmitter); 

Bây giờ bạn có thể sử dụng lớp học của bạn để lắng nghe và phát ra sự kiện:

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

Nếu bạn không cần thêm chức năng, 'var EventEmitter = require ('events'). EventEmitter; var myEmitter = new EventEmitter; 'cũng hoạt động. –

13

Nếu sử dụng thể hiện bạn cũng có thể chỉ cần lắng nghe cho sự kiện trên 'ứng dụng' nhanh mà kế thừa từ EventEmitter. Ví dụ:

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

và phát ra với nó như

res.app.emit("myEvent", data) 
Các vấn đề liên quan