gpt4 book ai didi

javascript - 创建执行某些任务的包装器

转载 作者:行者123 更新时间:2023-11-30 21:29:03 25 4
gpt4 key购买 nike

对于我的SQL,我想拥有一个包装器功能
1.创建一个连接池
2.并在每次查询后关闭连接。

立即编写函数内部,在我看来,我需要为每个请求创建和销毁连接。

const getEverythingFromTable = async (tableName) => {
const query = `SELECT * FROM ${tableName}`
return pool.getConnection((error, connection) => {
if (error) throw error
connection.query(queryString, (error, result) => {
if (error) throw error
connection.destroy();
return result
})
})
}



//getSelectedThingFromTable -> Another function


但是我在想是否可以创建一个包装函数来处理创建和销毁函数

有人可以帮助我创建更有效的方法吗?

最佳答案

在这里,我创建了一个包装函数queryDB,它将获取连接,执行传递给它的查询并返回结果。它在内部调用函数getConnection,该函数创建一个池并创建一个连接(如果不存在)并返回该连接。

const {promisify} = require('util');
const rp = require('request-promise'),
promise = require('util'),
mysql = require('mysql'),
mysqlConfig = {
host: "connectionName",
connectionLimit: "1",
user: "dbUser",
password: "dbPassword",
database: "dbName",
};
class ConnectionDB {
constructor() {
this.my_connection;
this.my_pool;
}

async getConnection() {
if (!this.pool) {
this.my_pool = mysql.createPool(mysqlConfig);
}
const getConn = promisify(this.my_pool.getConnection.bind(this.my_pool));
return await getConn();
}
async queryDB(req_data) {
try {
const my_obj = new ConnectionDB();
if (!this.my_connection)
this.my_connection = await my_obj.getConnection();
const req_data = req.body,
promisified_query = promisify(this.my_connection.query).bind(this.my_connection),
results = await promisified_query(req_data.query, req_data.query_obj);
if (!results || results.length <= 0) {
throw "Something Failed"
}
this.my_connection.release();
return results;
} catch (error) {
console.log(error)
}
};
}

关于javascript - 创建执行某些任务的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com