Хобрук: Ваш путь к мастерству в программировании

Возможная утечка памяти EventEmitter обнаружена без EventEmiter

Я долгое время пытался решить эту проблему самостоятельно, но не могу найти подходящего решения для своей проблемы.

У меня есть такой способ:

handle_database = function(callback, req, res) {

pool.getConnection(function(err,connection){
    if (err) {
        res.json({"code" : 100, "status" : "Error in connection database"});
        return;
    }

    connection.query("select * from `atable`",function(err,rows){
        connection.release();
        if(!err) {
            callback(rows);
        }
    });

    connection.on('error', function(err) {
        res.json({"code" : 100, "status" : "Error in connection database"});
        return;
    });
});
}

Этот метод используется в моем routes.js следующим образом:

router.get('/', function(req, res){
    db.getUsers(function (data) {
        res.render('pages/index',{users: data, title: 'title'});
    }, req, res);

});

Когда я обновляю эту страницу 11 раз подряд, я получаю следующее предупреждение:

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

Но я не могу найти, как это исправить, или просто устанавливаю ограничение на 0 - это разумная идея?


  • Что вы используете для подключения БД и управления пулом? 22.12.2016
  • Что это за плагин? В node есть десятки библиотек для доступа к базам данных. Вы используете mysqljs / mysql? 22.12.2016
  • плагин, который я использую: Mysql 2.12.0 22.12.2016

Ответы:


1

Вам не следует добавлять обработчик ошибок в соединение каждый раз, когда вы хотите отправить запрос. Соединение объединено в пул, вы не получаете каждый раз новое. В вашем случае это пул размером 10, и вы повторно используете соединение при одиннадцатом вызове, когда срабатывает предупреждение.

Просто проверьте ошибку

  • on pool.getConnection
  • in connection.query

Вот как это могло выглядеть:

handle_database = function(callback, req, res) {
    pool.getConnection(function(err,connection){
        if (err) {
            res.json({"code" : 100, "status" : "Error in connection database"});
            return;
        }

        connection.query("select * from `atable`",function(err,rows){
            connection.release();
            if(err) {
                res.json({"code" : whatever, "status" : "Error in querying database"});
                return;
            }
            callback(rows);

        });
    });
}
22.12.2016
Новые материалы

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..