node.js 云函数 创建连接池,监控连接数
本人用的是腾讯云函数。
1.创建云函数
选中mysql,点击下一步
function wrapPromise(pool) {
return new Promise((res, rej) => {
pool.getConnection(function (err, connection) {
connection.query("SELECT CONNECTION_ID()", function (error, results, fields) {
if (error) {
rej(error)
}
connection.release()
res(results)
})
});
})
}
function setUserInfoPromise(pool, sql, obj) {
return new Promise((res, rej) => {
pool.getConnection(function (err, connection) {
connection.query(sql, obj, function (error, results, fields) {
if (error) {
rej(error)
}
connection.release()
res(results)
})
});
})
}
exports.main_handler = async (event, context, callback) => {
const mysql = require('mysql');
//这里连接数据库最好是云数据库
const pool = mysql.createPool({
host: 'xxxxxxx',
user: 'xxxxx',
password: 'xxxxxx',
database: 'xxxxx',
port: xxxxx,
connectionLimit: 1
});
//取到当前连接的连接id
let connectionId = await wrapPromise(pool).then(result => {
return result[0];
});
//将connectionId插入user_info表
const insertUser = 'INSERT INTO 表名 SET ?';
const object = {
user_name: getRanNum(),
age: random(1, 10),
connection_id: connectionId['CONNECTION_ID()']
}
let insertUserInfo = await setUserInfoPromise(pool, insertUser, object).then(result => {
return result;
})
//将插入数据库里面的connection_id查出来
const queryResult = "select * from 表名";
const dateSet = await setUserInfoPromise(pool, queryResult);
return {
connectionId: connectionId,
data: dateSet
};
}
function getRanNum() {
var result = [];
for (var i = 0; i < 4; i++) {
var ranNum = Math.ceil(Math.random() * 25); //生成一个0到25的数字
//大写字母'A'的ASCII是65,A~Z的ASCII码就是65 + 0~25;然后调用String.fromCharCode()传入ASCII值返回相应的字符并push进数组里
result.push(String.fromCharCode(65 + ranNum));
}
return result.join('');
}
/**
* 产生随机整数,包含下限值,包括上限值
* @param {Number} lower 下限
* @param {Number} upper 上限
* @return {Number} 返回在下限到上限之间的一个随机整数
*/
function random(lower, upper) {
return Math.floor(Math.random() * (upper - lower + 1)) + lower;
}