【发布时间】:2014-08-07 19:45:46
【问题描述】:
我创建了两个模块,“person”和“group”,其中“group”依赖于“person”:
person.js:
var events = require('events');
exports.Person = function() {
var personEvents = new events.EventEmitter();
function generateEvent(args) {
console.log("Emitting event with args "+JSON.stringify(args));
personEvents.emit("myEvent", args);
}
return {
personEvents: personEvents,
generateEvent: generateEvent
};
}
group.js:
var PERSON = require("person.js").Person();
var events = require('events');
exports.Group = function() {
function handleEvent(args) {
console.log("Caught event with args "+JSON.stringify(args));
}
PERSON.personEvents.on("myEvent", function(args) {
handleEvent(args);
});
}
现在我将主程序 main.js 作为一个单独的模块:
var PERSON = require("person.js").Person();
var GROUP = require("group.js").Group();
PERSON.generateEvent({ type: "bla" });
当我执行“node ./main.js”时,我会看到生成了事件的消息,但是没有捕获到事件。似乎 group 模块中的侦听器未绑定到主命名空间中 person 模块中创建的相同“personEvents”变量。
我对 javascript 及其对编程的影响相当陌生。我使用我在互联网上找到的示例来获取到目前为止的代码,但我觉得这可能不是设置模块和跨模块事件的正确方法。
有人可以向我解释我应该如何设置模块,以便我可以在一个模块中生成事件并在另一个模块中捕获它们吗? 谢谢!
【问题讨论】:
-
通常模块不会相互通信...
-
我希望能够在一个模块中生成事件,其他模块可以监听并在需要时采取行动,从而创建松散耦合的组件。但是,如果这不是节点模块基础架构的用途,那么我想我必须重新考虑应用程序的整个设计。
标签: javascript node.js events module