警告:检测到可能的 EventEmitter 内存泄漏。 11 AppUp > 添加了听众。使用 emitter.setMaxListeners() 增加限制

warning: possible EventEmitter memory leak detected. 11 AppUp > listeners added. Use emitter.setMaxListeners() to increase limit

我正在使用以下事件发射器(并且我需要此功能)。 我的问题是如何避免错误。

我好像在另一个事件中使用事件。

warning: possible EventEmitter memory leak detected. 11 AppUp listeners added. Use emitter.setMaxListeners() to increase limit.

我正在使用节点 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
};

有没有办法避免这个错误?

每次调用 运行App 函数时,它都会为 AppUp 事件设置一个侦听器。因此,如果您多次调用 运行App 函数,则 运行 函数将被调用的次数与您之前调用 运行App 的次数相同,加上 AppUp 事件发出时的实际调用次数。

可能的解决方案是通过以下修改仅监听一次 AppUP 事件:

appStatus.eventEmitter.once('AppUp', function () {
    run(req, res);
});