我使用以下事件发射器(我需要此功能)。 我的问题是如何避免错误。
似乎我在另一个事件中使用了事件。
警告:检测到可能的EventEmitter内存泄漏。 11 AppUp 听众补充道。使用emitter.setMaxListeners()来增加限制。
我使用节点 0.12.7
这是所有模块代码:
var events = require('events');
var eventEmitter = new events.EventEmitter();
var run = function (req, res) {
host = req.headers.host.split(':')[0];
proxy.web(req, res, {
target: 'http://' + host + ':' + port
});
};
var runApp = function (req, res) {
appStatus.eventEmitter.on('AppUp', function () {
run(req, res);
});
if (model.get()) {
run(req, res);
}
}
module.exports = {
runApp: runApp
};
有没有办法避免这个错误?
答案 0 :(得分:1)
每次调用runApp函数时,它都会为AppUp事件设置一个监听器。因此,如果多次调用runApp函数,则调用run函数的次数与之前调用runApp的次数相同,并且在发出AppUp事件时调用实际调用次数。
可能的解决方案是仅通过以下修改来侦听AppUP事件一次:
appStatus.eventEmitter.once('AppUp', function () {
run(req, res);
});