2016-12-30 67 views
0

我试图在使用express的节点中创建REST api。当我第一次在浏览器中打开url时,它运行良好,并给我正确的输出。节点js mysql查询在执行第二次时给出错误

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); 

有人能告诉我什么我做错了,但是当我打的API网址第二次,应用程序与错误崩溃?

+0

考虑使用池而不是单个连接。当你想要一个连接时使用pool.getConnection(),当你完成它的使用connection.release(); – Dave

回答

0

尝试this删除还原剂连接。这是谷歌搜索错误消息的第一个结果 - 在问这个问题之前总是尝试google错误消息。

3

只需删除connection.connect()connection.end()。那么它应该工作。

connection.connect()应被调用一次或不调用。因为connection.query将连接我不会连接。当连接丢失时,需要调用PS - connection.connect()