2012-09-02 11 views
14

के साथ नोड.जेएस में कस्टम इवेंट्स, इसलिए, मैं जानना चाहता हूं कि node.js में कस्टम इवेंट कैसे बनाएं, और मैं एक दीवार मार रहा हूं। मुझे पूरा यकीन है कि मैं कैसे व्यक्त करता है और कैसे node.js घटनाओं के काम के बारे में कुछ गलत समझ रहा हूँ।एक्सप्रेस फ्रेमवर्क

https://creativespace.nodejitsu.com यह ऐप है।

जब कोई उपयोगकर्ता एक नई "गतिविधि" बनाता है (कुछ ऐसा होता है) तो वे एक 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 

    }); 
}); 

तो त्रुटि मैं अपरिभाषित की विधि पर कॉल नहीं कर सकता है और यह को संदर्भित करता है क्या लाइन में होगा 2 ऊपर socket.io। मुझे लगता है कि मैं अपनी ज़रूरतों को गड़बड़ कर रहा हूं, शायद ... या मैं समझ नहीं पा रहा हूं कि घटनाएं कैसे काम करती हैं।

कोई भी मदद, नोड.जेएस घटनाओं पर अच्छी पढ़ने के संदर्भ में भी रॉक होगा!

धन्यवाद !!!

+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 = आवश्यकता (' ईवेंट ')। EventEmitter; var myEmitter = नया EventEmitter; 'साथ ही साथ काम करता है। –

13

हैं का उपयोग कर व्यक्त आप भी सिर्फ एक्सप्रेस 'ऐप्लिकेशन' जो EventEmitter से विरासत पर घटना के लिए सुन सकते हैं। उदाहरण के लिए:

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

और इसे करने के लिए की तरह

res.app.emit("myEvent", data) 
संबंधित मुद्दे