node-mysql其中connection.end()去

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

我不完全明白它在哪里,目前我把它放在查询后,但如果我创build一个新的查询,我得到一个错误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()

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

根据文档 :

closures连接是使用end()来完成的,它确保所有剩余的查询在发送一个退出数据包到mysql服务器之前被执行。

connection.end()然后应该被调用,只有当你停止发送查询到MySQL,即当你的应用程序正在停止。 您不应该始终创build/终止连接:只对所有查询使用相同的连接(或者使用连接池来提高效率)。

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

它给出的错误,因为你是在队列中closures连接