You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中MaxListenersExceededWarning警告的产生原因是什么?

解决Node.js MaxListenersExceededWarning 警告

这个警告和WebSocket无关,核心问题是**process 对象上绑定的 uncaughtException 事件监听器数量超过了Node.js默认的10个限制**。你自己没显式添加这类监听器,大概率是项目依赖的第三方包(或路由模块引入的依赖)重复添加了该监听器,累加后触发了警告。

排查与解决步骤:

  1. 临时消除警告(治标)
    如果你想先快速压制警告,可以在代码最顶部添加一行,调整监听器上限:

    // 设为0表示不限制,也可以设一个更大的数值比如20
    process.setMaxListeners(0);
    

    但这只是临时方案,建议优先找根源。

  2. 定位具体是哪个模块在加监听器
    在服务器启动代码(server.listen 之前)添加以下代码,打印所有uncaughtException监听器的定义信息,能帮你定位到具体来源:

    console.log("所有uncaughtException监听器:");
    process.listeners('uncaughtException').forEach((listener, index) => {
      console.log(`监听器${index+1}:`, listener.toString());
    });
    

    运行后看输出,通常能从函数体或栈信息里找到对应的包名或模块文件。

  3. 优化依赖与代码

    • 替换冗余依赖:你当前用的body-parser在Express 4.16.0+版本已经内置了,可以直接去掉body-parser包,改用Express自带的中间件:
      // 替换原来的body-parser相关代码
      app.use(express.json({limit: '10MB'}));
      app.use(express.urlencoded({extended: true}));
      
      减少依赖可能会减少监听器冲突。
    • 更新或替换问题依赖:如果定位到是某个特定包导致的,查看该包的最新版本是否修复了这个问题,或者寻找替代包。比如旧版本的swagger相关工具可能存在这类重复绑定的问题。
    • 检查路由模块:你引入的./src/routes里可能包含数据库连接、第三方SDK等模块,这些模块也可能添加了uncaughtException监听器,逐一排查路由里的依赖。

内容的提问来源于stack exchange,提问作者dokichan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:57:26