2013-09-05 66 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 - 哪个支持的池连接... –