我得到以下警告:

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace: 
    at EventEmitter.<anonymous> (events.js:139:15)
    at EventEmitter.<anonymous> (node.js:385:29)
    at Server.<anonymous> (server.js:20:17)
    at Server.emit (events.js:70:17)
    at HTTPParser.onIncoming (http.js:1514:12)
    at HTTPParser.onHeadersComplete (http.js:102:31)
    at Socket.ondata (http.js:1410:22)
    at TCP.onread (net.js:354:27)

我在server.js中写了这样的代码:

http.createServer(
    function (req, res) { ... }).listen(3013);

如何解决这个问题?


当前回答

我也面临着同样的问题,但我已经成功地处理了异步等待。 请检查是否有帮助。 let dataLength = 25; 之前: for(设I = 0;i < dataLength;我+ +){ sftp。get (remotePath fs.createWriteStream (xyzProject / ${数据[我]. name})); } 后: for(设I = 0;i < dataLength;我+ +){ 等待sftp。get (remotePath fs.createWriteStream (xyzProject / ${数据[我]. name})); }

其他回答

在我的情况下,这是由于没有关闭到数据库的Sequelize连接,而创建他们内部的异步函数调用setInterval。

把它放在你的server.js(或任何包含你的主Node.js应用程序)的第一行:

需要.EventEmitter.prototype(“事件”)。_maxListeners = 0;

错误就消失了:)

我也有同样的问题。这个问题是因为我在两个监听器上监听端口8080。

setMaxListeners()工作得很好,但我不推荐它。

正确的方法是,检查你的代码额外的监听器,删除监听器或改变端口号,你正在监听,这解决了我的问题。

I prefer to hunt down and fix problems instead of suppressing logs whenever possible. After a couple days of observing this issue in my app, I realized I was setting listeners on the req.socket in an Express middleware to catch socket io errors that kept popping up. At some point, I learned that that was not necessary, but I kept the listeners around anyway. I just removed them and the error you are experiencing went away. I verified it was the cause by running requests to my server with and without the following middleware:

socketEventsHandler(req, res, next) {
        req.socket.on("error", function(err) {
            console.error('------REQ ERROR')
            console.error(err.stack)
        });
        res.socket.on("error", function(err) {
            console.error('------RES ERROR')
            console.error(err.stack)
        });
        next();
    }

删除该中间件将停止您所看到的警告。我会查看您的代码,并尝试找到您可能设置了不需要的侦听器的任何地方。

我也面临着同样的问题,但我已经成功地处理了异步等待。 请检查是否有帮助。 let dataLength = 25; 之前: for(设I = 0;i < dataLength;我+ +){ sftp。get (remotePath fs.createWriteStream (xyzProject / ${数据[我]. name})); } 后: for(设I = 0;i < dataLength;我+ +){ 等待sftp。get (remotePath fs.createWriteStream (xyzProject / ${数据[我]. name})); }