2013-09-05 88 views
0

我已經開始使用池連接到mysql,而不是使用正常連接Node.js。因爲我需要在處理完成後釋放連接。當連接保持開放時,Node.js由於而導致異常mysql超時問題。Node.js mysql池問題

我已經編輯我的代碼,而不是它給了我這樣的錯誤在94行:

TypeError: Object #<Connection> has no method 'release' 
    at Query._callback (/usr/local/src/conn.js:94:28) 

上面的內容:

socket.on('getUnreadPM', function (msg) { 


    var userSocket = clients[msg.userDestID]; 

    if (msg.lastGotMessage == 'none') { 
     post = 'Select * from messages where (destUserID=\'' + msg.userDestID + '\' AND srcUserID=\'' + msg.userSrcID + '\') OR (destUserID=\'' + msg.userSrcID + '\' AND srcUserID=\'' + msg.userDestID + '\')'; 

    } else { 

     post = 'Select * from messages where destUserID=\'' + msg.userDestID + '\' AND srcUserID= \'' + msg.userSrcID + '\' AND messageSendDate between \'' + msg.lastGotMessage + '\' and \'' + msg.deviceCurrentTime + '\' AND messageSendDate > \'' + msg.lastGotMessage + '\' order by messageSendDate'; 

    } 

    pool.getConnection(function (err, connection) { 
     // Use the connection 
     connection.query(post, function (error, results, fields) { 
      // And done with the connection. 

      if (results.length > 0) { 

       if (typeof userSocket !== 'undefined') { 

        var boolData = results[0]; 
        //console.log('bool data lenght : ',results.length); 
        var messageID = new Array(); 
        var srcUserID = new Array(); 
        var destUserID = new Array(); 
        var messageContent = new Array(); 
        var messageDate = new Array(); 
        var didRead = new Array(); 

        for (var i = 0; i < results.length; i++) 

        { 
         messageID.push(results[i].messageID); 
         srcUserID.push(results[i].srcUserID); 
         destUserID.push(results[i].destUserID); 
         messageContent.push(results[i].messageContent); 
         messageDate.push(dateFormat(results[i].messageSendDate, "yyyy-mm-dd HH:MM:ss")); 
         didRead.push(results[i].didRead); 
        } 

        userSocket.emit('history :', { 
         'dataMode': 'history', 
          'srcUserID': srcUserID, 
          'destUserID': destUserID, 
          'messageContent': messageContent, 
          'messageSendDate': messageDate, 
          'didread': didRead 
        }); 

       } else { 

        userSocket.emit('history :', { 
         'dataMode': 'none', 

        }); 
       } 

      } else { 

       userSocket.emit('history :', { 
        'dataMode': 'none', 

       });     

      } 

      connection.release(); 

     }); 
    }); 
}); 
+0

我解決了我的問題,只需將connection.end();在每個節點的mysql函數之後... –

回答

0

MySQL連接沒有釋放的方法。所以你不能釋放它。

我幾個月前寫了這樣一個節點模塊爲我的應用程序,你可以在這裏找到:https://github.com/LinuxDoku/node-mysql-pool

它在啓動時創建連接的池,隊列中的查詢並將其連續發送到數據庫。獲得結果後,將爲新查詢釋放連接。

+0

我剛剛使用了Pools方法。有沒有關於MySQL驅動程序的問題,我與Npm? –

+0

你正在使用哪個mysql驅動程序? –

+0

http://travis-ci.org/felixge/node-mysql - 哪個支持的池連接... –