我系统上的 ulimit 是 1024。我遇到过很多关于相同错误但没有具体答案的帖子。我还想知道这是否是 Node/Node mysql 问题而不是与我的代码有关。我将在这里发布我的代码片段:
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 有问题?感谢您的帮助!
最佳答案
我认为你应该更多地使用闭包。直接引用 fn2 将使用命名对象,这将防止它超出范围。通过闭包引用相同的代码将导致匿名层,这将允许引用优雅地退出作用域并被垃圾收集。
关于javascript - Node.js node-mysql 错误 : EMFILE, 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631850/