node-mysql connection.end()在哪里

Sir*_*Sir 16 mysql sockets node.js

我真的很困惑在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();
           });
   });
Run Code Online (Sandbox Code Playgroud)

此后如果我有任何其他查询我得到错误发生.

我在我的jsFiddle中做了一个更明智的解释:http://jsfiddle.net/K2FBk/以更好地解释我得到的问题.node-mysql的文档并没有完全解释正确的放置位置connection.end()

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

Pau*_*gel 15

根据文件:

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

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

  • 感谢您的回复,所以在我的 JSFiddle 代码中,我会简单地将它放在第 75 行吗?=/ 或者它是否仍然必须在应用程序连接中......这是我发现令人困惑的地方。 (2认同)
  • 当您的应用程序停止时,您将关闭连接。如果您使用 control-c 键停止它,那么 [看看这个答案](http://stackoverflow.com/a/9299388/2137601) 并将 `connection.close()` 放在那里。 (2认同)