选择基于参数节点mysql restful的连接池

时间:2017-10-03 09:36:07

标签: mysql node.js express connection-pooling

我们正在尝试在快速Nodejs中创建基于mysql DB的后端 - RESTFUL api。我的老板(备受赞誉的mysql大师)坚持认为我们应该使用比1更多的连接池 - 基于用户分组的不同角色。

所以我需要在文件B.js中定义/创建不同的连接池 - >并将它们作为全局变量,以便我以后可以访问它们。 在文件A.js中我有一条这样的路由 - 其中用户可以使用参数调用存储过程。但是,我希望能够定义从哪个连接池调用连接 - 在路由本身(基于会话(req.user.role)变量)。

那样:

pool1.getConnection(function(err,connection){
        if (err) {
            connection.release();
            res.json({"code" : 100, "status" : "Error in connection database"});
            return;
        }   
        console.log('connected as id ' + connection.threadId);
        connection.query(query1, val, function (err, rows, fields) {
            connection.release();
            if(!err) {
                var results = JSON.stringify(rows[0]);
                console.log(results);
                console.log(typeof(results));
                console.log(rows[0][0]);
                console.log(typeof(rows[0]));
                res.send(JSON.stringify(results));
            }           
        });
        connection.on('error', function(err) { 
            connection.release();
            res.json({"code" : 100, "status" : "Error in connection database"});
            return;     
            });
    });



    });
};

指的是pool1,但是如果是其他用户 - > pool1应该连接到其他池 - 在其他文件中定义。 我希望我对自己的问题很清楚。

3 个答案:

答案 0 :(得分:0)

我不知道你为什么要这样做,或者你的老板想要这样做,更多的连接池不会使应用程序更有效率,它只会让人迷惑。由于MySQL服务器有其客户端限制。顺便说一下,如果你想知道用户的角色,你必须首先连接数据库并获取用户数据。为什么不使用相同的连接来做其他事情,那就没事了。

答案 1 :(得分:0)

您不需要使用全局变量,可以导出包含每个池的对象:

// B.js
module.exports = {
  regular : mysql.createPool({ ... }),
  admin   : mysql.createPool({ ... }),
};

// A.js
const pools = require('./B');
...
let pool = pools[req.user.role];
if (! pool) {
  throw Error('there is no pool for user role ' + req.user.role);
}
pool.getConnection(...);

因此,这声明了两个池,一个用于“常规”用户,一个用于“admin”用户。它使用req.user.role的值(假设它包含两个值中的一个:“regular”或“admin”,但这只是为了本例的目的)来选择应该使用的池。

我不确定拥有多个池的好处是什么,除非它们连接到两个不同的数据库或使用不同的数据库凭据。

答案 2 :(得分:-1)

我们有多个UI开发人员,每个人都开发了一个角色,所以我们不希望所有的UI开发人员都能看到所有的商店程序......(那个老板)