我真的很困惑在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()
应该去哪里避免这个错误?
答案 0 :(得分:12)
然后,只有当您停止向MySQL发送查询时,即当您的应用程序停止时,才会调用<{使用end()关闭连接,确保在将退出数据包发送到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
期间关闭连接,因此给出错误