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

Node.js使用request模块发起GET请求触发内存泄漏警告排查

解决Node.js中"Possible EventEmitter memory leak detected"警告的问题

首先,先帮你拆解这个警告的本质:Node.js的EventEmitter默认限制每个事件最多绑定10个监听器,当超过这个数量时,就会抛出这个内存泄漏警告(注意这只是提示,不一定真的有内存泄漏,但确实说明有异常的监听器累积)。

看你提供的代码,单次request GET请求理论上不该触发这个警告,大概率是旧版本request模块的内部实现问题——这个模块已经在2020年停止维护了,旧版本在处理HTTP请求流时,可能会创建超过10个的pipe监听器,刚好触碰到Node.js的默认限制。

下面给你几个可行的解决方案:

1. 临时调高监听器上限(快速治标)

在代码最开头添加一行,全局调高EventEmitter的默认监听器数量:

// 把默认上限调到20,可根据实际情况调整数值
require('events').EventEmitter.defaultMaxListeners = 20;

const request = require('request');
// 你的原有代码...

这个方法能快速消除警告,但只是临时解决,没有从根源上处理问题。

2. 替换为维护中的HTTP请求库(推荐治本)

request模块已经停止维护,后续不会有bug修复和安全更新,建议换成更现代的替代库,比如axios或者node-fetch,这些库的实现更规范,不容易出现这类奇怪的监听器问题。

用axios重写的示例代码:

首先安装axios:

npm install axios

然后替换你的scrape.js:

const axios = require('axios');

const uri = 'https://www.somewebsite.com/auth/get_menu/?city_id=1';
const headers = {
  'accept': '*/*',
  'content-type': 'application/json',
  'app_client': 'consumer_web'
};

axios.get(uri, { headers })
  .then(response => {
    console.log(response); // 完整响应对象
    console.log(response.data); // 响应体内容
  })
  .catch(err => {
    console.error('请求出错:', err);
  });

用node-fetch重写的示例代码:

如果偏好使用浏览器标准的fetch API,可以用node-fetch(注意v3版本是ESM,如果你用CommonJS的话建议装v2):

npm install node-fetch@2

然后编写代码:

const fetch = require('node-fetch');

const uri = 'https://www.somewebsite.com/auth/get_menu/?city_id=1';
const headers = {
  'accept': '*/*',
  'content-type': 'application/json',
  'app_client': 'consumer_web'
};

fetch(uri, { method: 'GET', headers })
  .then(response => {
    // 如果响应是JSON格式用response.json(),否则用response.text()
    return response.json();
  })
  .then(body => {
    console.log(body);
  })
  .catch(err => {
    console.error('请求出错:', err);
  });

额外排查点

如果换了库还是出现警告,那要检查你的代码是不是被意外重复执行了(比如放在循环里、或者被其他代码多次调用),这种情况会导致监听器累积超过上限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:38:10