Запрос Node js mysql выдает ошибку при выполнении во второй раз

Я пытаюсь сделать REST API в узле, используя экспресс. Когда я открываю URL-адрес в браузере в первый раз, он работает нормально и дает мне правильный вывод. Но когда я нажимаю URL-адрес API во второй раз, приложение вылетает с ошибкой:

Events.js:141 метатель; // Необработанное событие "ошибка" ^

Ошибка: невозможно поставить рукопожатие в очередь после вызова quit.

Это код, который я использую:

var express = require('express');
var mysql = require('mysql');

var app = express();
var connection = mysql.createConnection({
  host: 'localhost',
  user: 'USER_NAME',
  password: 'PASSWORD'
});

app.use(express.static(__dirname + '/public'));
var port = 3333;

app.get('/api/users/:user_id', function(req, res){
    var lead_id = req.params.user_id;

    connection.connect();

    connection.query('use DB_NAME;', function (err) {
        if(err) throw err;

        connection.query('select * from users where user_id = ' + user_id, function (err, rows) {
            if(err) throw err;

            res.json(rows);
            connection.end();
        });
    });
});

app.listen(port);
console.log("The app is running on port " + port);

Может кто-нибудь сказать мне, что я делаю неправильно?


person mrid    schedule 30.12.2016    source источник
comment
Рассмотрите возможность использования пула вместо одного соединения. Когда вам нужно соединение, используйте pool.getConnection(), а когда вы закончите, используйте connection.release();   -  person Dave    schedule 01.01.2017


Ответы (2)


Просто удалите connection.connect() и connection.end(). Тогда это должно работать.

connection.connect() следует вызывать один раз или ни разу. Поскольку connection.query будет подключаться, я бы его не подключил.

PS - connection.connect() нужно вызывать при потере связи.

person Shreyash S Sarnayak    schedule 30.12.2016

Попробуйте это, чтобы удалить избыточное соединение. Это был первый результат поиска сообщения об ошибке в Google — всегда старайтесь искать сообщения об ошибках в Google, прежде чем спрашивать SO.

person Andy    schedule 30.12.2016