NodeJS mysql连接池使用及遇到的神坑

2022-07-11  本文已影响0人  何家小富富

原文: NodeJS mysql连接池使用及遇到的坑

神坑:

并发访问时,通过 conn.release()释放连接不成功 ,导致一定访问达到连接数上限后,
pool.getConnection 直接卡死没有任何的回调
改成 pool.releaseConnection(conn) 才okay!

PS: 可以通过以下命令查看当前的mysql连接数:
mysqladmin -uroot -proot processlist

explain

开发的项目中的确 出现了这个问题,感谢原博主的分享。特此记录一下

改造后的代码

const mysqlDb = require('mysql');
const mysqlPool = mysqlDb.createPool(config.mysqlConnect);

const query = function (sql, callback) {
    console.log("test--10:",sql);
    // var mysqlPool = mysqlDb.createPool(config.mysqlConnect);
    mysqlPool.getConnection(function (err, conn) {
        if (err) {
            console.log("test--11:",err);
            callback(err, null, null);
            throw new Error(" 从mysql 连接池中 获取 连接失败[luo Mr.]!!");
        } else {
            console.log("test--12:",sql);
            if( sql == null ){ 
                    // 兼容sql为 null
                return callback( undefined, "", "",);
            }
            conn.query(sql, function (qerr, vals, fields) {
                console.log("test--13:",qerr, vals);
                // 释放连接
                // conn.release();
                mysqlPool.releaseConnection(conn)
                // 事件驱动回调
                callback(qerr, vals, fields);
            });
        }
    });
};
上一篇下一篇

猜你喜欢

热点阅读