2016-12-30 2 views
0

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

events.js:141 throw er; // Unhandled 'error' event ^

Error: Cannot enqueue Handshake after invoking 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); 

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

+0

Рассмотрите возможность использования пула вместо одного соединения. Если вы хотите, чтобы соединение использовало pool.getConnection(), и когда вы закончите с ним, используйте connection.release(); – Dave

ответ

0

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

3

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

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

PS - connection.connect() необходимо вызвать, когда соединение потеряно.

Смежные вопросы