使い方 - node-mysql は connection.end() が行く場所



node.js sockets (2)

私は本当に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/ ://jsfiddle.net/K2FBk/は私が得ている問題をよりよく説明するために。 node-mysqlのドキュメントはconnection.end()を置くための正しい場所を完全には説明していません

このエラーを回避するためにどこに行けばよいですか。

https://src-bin.com


Answer #1

ドキュメントごと

接続を閉じるには、end()を使用します。これにより、終了パケットをmysqlサーバーに送信する前に、残りのすべてのクエリが実行されます。

connection.end()は、MySQLへのクエリ送信を停止したとき、つまりアプリケーションが停止したときにのみ呼び出されるようになっています。 常に接続を作成/終了しないでください。すべてのクエリに同じ接続を使用するだけです(またはより効率的にするために接続プールを使用するだけです)。


Answer #2
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
   });

エンキュー中に接続を閉じているため、エラーが発生しています





sockets