首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >connection.end()到哪里去?

connection.end()到哪里去?
EN

Stack Overflow用户
提问于 2013-12-19 22:32:12
回答 2查看 31.1K关注 0票数 21

我真的对在node中使用connection.end()感到困惑。

我不完全理解它的去向,现在我把它放在查询之后,但是如果我创建了一个新的查询,就会得到一个错误的Cannot enqueue Query after invoking quit.

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

代码语言:javascript
复制
   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()的正确位置。

为了避免这个错误,它应该去哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-19 22:41:54

the documentation

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

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

票数 20
EN

Stack Overflow用户

发布于 2017-06-23 06:29:10

代码语言:javascript
复制
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期间正在关闭连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20692989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档