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连接