我真的对在node中使用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/,以更好地解释我得到的问题。有关节点-mysql的文档并不完全解释放置connection.end()的正确位置。
为了避免这个错误,它应该去哪里?
发布于 2013-12-19 22:41:54
关闭连接是使用end()完成的,这确保在向mysql服务器发送退出数据包之前执行所有剩余的查询。
然后,只有当您停止向connection.end()发送查询时,即当应用程序停止时,才会调用MySQL。您不应该总是创建/结束连接:只需对所有查询使用相同的连接(或者使用连接池来提高效率)。
发布于 2017-06-23 06:29:10
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期间正在关闭连接。
https://stackoverflow.com/questions/20692989
复制相似问题