正在获取mysql:尽管在nodeJs中使用了createPool,但是“连接太多”

时间:2018-12-20 06:33:43

标签: mysql node.js angular promise connection-pooling

我正在使用Observables在angular2 +应用程序中显示实时数据,并且后端是在使用mysql数据库的NodeJ中编写的。由于我使用的是Observables,因此我需要数以千万计的mysql连接以保持实时工作的进行。但是不可能获得那么多连接。因此,我使用了从连接池中创建连接的池。但是,我无法实现它。我仍然收到错误:

  

错误:ER_CON_COUNT_ERROR:连接过多”

请帮助我关闭我的连接,以使连接不超过数量。

前端代码

angular.component.ts

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

  this.viewData(Val);

  // more functions

  console.log(" Observable")
});

nodeJS代码

dashboard.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();
}

1 个答案:

答案 0 :(得分:1)

您正在为每个请求创建mysql池。您应该具有单个连接池。

连接池自动管理与mysql服务器的连接。

您需要从函数中删除连接池初始化。

将连接拔出

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

功能内

conn = await conPool.getConnection();