我一直在寻找一种方法来使用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。
答案 0 :(得分:1)
我正在尝试使用azure mysql db提供的连接字符串,格式为:
Database=DATABASE;Data Source=HOST;User Id=USERID;Password=PASSWORD
但事实证明这种格式不受支持,当我使用它时它起作用了:
mysql://USERID:PASSWORD@HOST/DATABASE
答案 1 :(得分:0)
基于node-mysql
的来源,遗憾的是无法创建具有连接字符串的池。
我认为你应该解析连接字符串,其中包含所有必要的信息。
例如:
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');