使用连接字符串nodejs mysql创建池

时间:2016-02-06 04:29:38

标签: mysql node.js azure

我一直在寻找一种方法来使用mysql连接字符串来创建池而不是使用凭据,这样我就可以使用azure应用程序设置中的连接字符串,但到目前为止找不到解决方案。

我可以这样创建一个游泳池:

pool = mysql.createPool({
    connectionLimit: 20,
    host: HOST,
    user: USER,
    password: PASSWORD,
    database: DATABASE,
    debug: false
});

但我想要实现的是这样的:

pool = mysql.createPool(process.env.MYSQLCONNSTR_connectionstring);

我正在使用模块felixge/node-mysql

3 个答案:

答案 0 :(得分:1)

我正在尝试使用azure mysql db提供的连接字符串,格式为:

Database=DATABASE;Data Source=HOST;User Id=USERID;Password=PASSWORD

但事实证明这种格式不受支持,当我使用它时它起作用了:

mysql://USERID:PASSWORD@HOST/DATABASE

答案 1 :(得分:0)

基于node-mysql的来源,遗憾的是无法创建具有连接字符串的池。

参考:PoolConfig.js

我认为你应该解析连接字符串,其中包含所有必要的信息。

例如:

let connectionString = 'mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700';

// remove mysql://
connectionString = connectionString.substring(8, connectionString.length)

// Get user and password
let userAndPassw = connectionString.split('@')[0];
let user = userAndPassw.split(':')[0];
let password = userAndPassw.split(':')[1];

// Host
let host = connectionString.split('@')[1];
host = host.split('?')[0];

答案 2 :(得分:0)

由于答案没有写清楚,我想澄清一下。我在查询字符串中指定了 connectionLimit 值,现在它可以工作了:

let pool = mysql.createPool('mysql://xxx@xxx/xxx?charset=utf8mb4&connectionLimit=10');