获取mysql:尽管nodejs中使用了createpool,但“连接太多”

xjreopfe  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(349)

我使用observates在angular2+应用程序中显示实时数据,后端是用nodejs编写的,nodejs使用mysql数据库。因为我使用的是observates,所以我需要数千万个mysql连接来保持实时工作的进行。
但不可能获得这么多的联系。所以我使用了连接池,其中一个连接是从连接池中创建的。但是,我没有实现它。我仍然得到错误:
错误:er\u con\u count\u错误:连接太多“
我如何才能关闭我的连接,使连接数量不超过?
前端代码:
Angular .component.ts

Observable.interval(10000).subscribe(x => {

  this.viewData(Val);

  // more functions

  console.log(" Observable")
});

节点代码:
Jmeter 板.service.js

function viewData(data) {

    var sqlQuery = `
    select * from TRANSACTION_PAYLOAD where INTERFACE_NAME = 'Highmark' AND (STATUS ='SUCCESS_RESPONSE')`

    var deferred = Q.defer();
    console.log("INSIDE NODE JS SERVICE");

    var host = config.host;
    var user = config.user;
    var password = config.password;
    var database = config.database;

    var con = mysql.createPool({
        host: host,
        user: user,
        password: password,
        database: database
    });

    con.getConnection(function (err) {
        console.log("Inside .getConnection ")

        if (err) deferred.reject(err.name + ': ' + err.message);

        con.query(sqlQuery,
            function (err, result, fields) {
                if (err) deferred.reject(err.name + ': ' + err.message);

                console.log(result);
                deferred.resolve(result);
            });
    });
    return deferred.promise; 
    con.close();
}
odopli94

odopli941#

您正在为每个请求创建mysql池。你应该有一个连接池。
连接池自动管理到mysql服务器的连接。
您需要将连接池初始化从函数中去掉。
将接头拔出

const mysqlConOptions = {
    host: host,
    user: user,
    password: password,
    database: database
};
var conPool = mysql.createPool(mysqlConOptions);

在你的职能范围内,

conn = await conPool.getConnection();

相关问题