2011-07-09 101 views
3

我的系統上的ulimit是1024.我遇到過很多關於同樣錯誤但沒有具體答案的帖子。我也想知道這是否是node/node-mysql問題,而不是用我的代碼。我會後我的代碼在這裏的一個片段:Node.js node-mysql錯誤:EMFILE,打開的文件太多

exports.fn1 = function(req,res,host,user,password,database){ 
     var client = connectDB.connectDatabase(host,user,password,database); 
       fn2(); 

    function fn2() { 
       client.query(
         'select statement', args, 
         function selectCb(error, result, fields) { 
            if (error) { 
              console.log('ERROR'); 
                client.end(); 
                return; 
            } 
            
            if(not timeout) { 
             setTimeout(function(){ 
                 
                 fn2(); 
                },5000); 
            } 
            
          else { 
           res.writeHead(200, {'Content-Type': 'text/plain'}); 
        res.write(somedata); 
        res.end();  
        client.end(); 
       } 


     }); 
     } 
    } 
}; 

connectDB是我寫這確實數據庫連接

var Client = require('mysql').Client;  

exports.connectDatabase = function(host,user,password,database) { 
    var client = new Client(); //Database connection object 
    //Credentials for DB connection 
    client.host = host;  
    client.user = user; 
    client.password = password; 
    client.database = database; 

    client.connect(function(error, results) { 
       if(error) { 
         console.log('Connection Error:'); 
         return; 
       } 
    }); 
    return client; 
} 

我做得不對這裏的node.js或者是它的驅動器的模塊/node.js問題?謝謝您的幫助!

回答

2

我認爲你應該更多地使用閉包。直接引用fn2將會使用命名對象,這將防止它超出範圍。通過閉包引用相同的代碼將導致一層匿名性,這將允許引用正常退出範圍並進行垃圾收集。

相關問題