javascript - Node.js node-mysql 错误 : EMFILE, 打开的文件太多

标签 javascript mysql node.js

我系统上的 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/

相关文章:

mysql - golang -> gorm : How I can use sql. NullInt64 在 mysql 中是 int(10)?

php - Laravel 与 Docker 连接 MySQL 的问题

mysql - 使用mysql查询提取具有相同爱好的客户

javascript - Mongodb/mongoose 只保存一次然后创建 500 错误

node.js - 与 Node 一起使用异步

javascript - 复制到剪贴板链接?关闭

javascript - 将多个表合并到一个数据库 SQLite

javascript - chrome 不允许访问网络摄像头

javascript - <td ng-repeat ="x in names |orderBy:' -印地语' | limitTo :1"> {{x. name}} 如果用户编辑任何单个数据槽,则标记应更新

javascript - 基于多个属性过滤对象数组