Node.JS: Простой GET с выдачей модуля запроса «Обнаружена возможная утечка памяти в EventEmitter» - PullRequest
0 голосов
/ 19 января 2020

Пытался понять основы Web Scraping и успешно делал это с Python. При попытке эмулировать то же самое с Node появляется следующая ошибка:

Обнаружена возможная утечка памяти EventEmitter. Добавлено 11 слушателей. Используйте emitter.setMaxListeners () для увеличения лимита

Ниже приведен простой фрагмент кода, который я пытаюсь запустить, используя чистку узла. js:

const request = require('request');

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

process.on('warning', e => console.warn(e.stack));

request({uri, headers, method: 'GET'}, (err, response, body) => {
    if(!err){
        console.log(response);

        console.log(body);
    }
});

Пожалуйста, дайте мне, где я делаю это неправильно. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 января 2020

Похоже, что веб-сайт, который вы пытаетесь удалить, генерирует infinte l oop с отключенными файлами cookie, поэтому вам необходимо включить их при отправке запроса. Примерно так должно работать.

const request = require("request");

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

process.on("warning", e => console.warn(e.stack));

request({ uri, headers, method: "GET", "jar": true }, (err, response, body) => {
  if (!err) {
    console.log(response);

    console.log(err);
  }
});

установка jar на true - вот хитрость.

Кстати, модуль запроса становится необслуживаемым, поэтому лучше использовать некоторые современные пакеты, такие как got, axios et c. Надеюсь, это поможет

0 голосов
/ 19 января 2020

Вы можете диагностировать причину утечки памяти с помощью этой команды node --trace-warnings app.js

По умолчанию Nodejs позволяет установить 10 прослушивателей для любого отдельного события, если вы хотите изменить ограничение, вы можете используйте набор setMaxListeners.

Но прежде чем увеличивать лимит, убедитесь, что нет такой вещи, как бесконечный l oop, который вызывает утечку памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...