node-mysql connection.end()在哪里

时间:2013-12-19 22:32:12

标签: mysql node.js sockets

我真的很困惑在node-mysql中使用connection.end()。

我不完全了解它的位置,目前我在查询后放置它但是如果我创建一个新查询,我会收到错误Cannot enqueue Query after invoking quit.

现在我的应用程序有一堆检查,其中之一是:

   socket.on('connect', function(data,callBack){
       var session = sanitize(data['session']).escape();                    

       var query = connection.query('SELECT uid FROM sessions WHERE id = ?', [session],
           function(err,results){
           if(err){ 
                  console.log('Oh No! '+err);                   
              }else{
                  io.sockets.socket(socket.id).emit('connectConfirm',{data : true});
              }
              connection.end();
           });
   });

此后,如果我有任何其他查询,我会收到错误。

我在我的jsFiddle中做了一个更明智的解释: http://jsfiddle.net/K2FBk/ ,以便更好地解释我遇到的问题。 node-mysql的文档并没有完全解释放置connection.end()

的正确位置

应该去哪里避免这个错误?

2 个答案:

答案 0 :(得分:12)

the documentation

  

使用end()关闭连接,确保在将退出数据包发送到mysql服务器之前执行所有剩余的查询。

然后,只有当您停止向MySQL发送查询时,即当您的应用程序停止时,才会调用<{connection.end()。您不应该一直创建/结束连接:只需对所有查询使用相同的连接(或使用连接池以提高效率)。

答案 1 :(得分:1)

socket.on('connect', function(data,callBack){
       var session = sanitize(data['session']).escape();                    

       var query = connection.query('SELECT uid FROM sessions WHERE id = ?', [session],
           function(err,results){
           if(err){ 
                  console.log('Oh No! '+err);                   
              }else{
                  io.sockets.socket(socket.id).emit('connectConfirm',{data : true});
              }

           });

       connection.end(); // close connection outside the callback
   });

由于您在en-queue

期间关闭连接,因此给出错误