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

标签 javascript mysql node.js

对于我的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/

相关文章:

javascript - 在 Bootstrap 中显示动态嵌套下拉列表

javascript - 如何让网页播放声音

python - 使用python从数据库的多个表中提取多个值

java - 我们如何确定 Connection.close() 被调用

node.js - Mongoose:将 addToSet 与 ObjectIds 一起使用会导致孤立 ID

node.js - 如何在代码级别生成 mpd(MPEG Dash list )文件

javascript - 全局作用域的函数表达式

javascript - 工具提示内的任何 HTML 标记都会导致基本工具提示在悬停时关闭

java - jooq 代码生成 mysql 远程数据库 maven

node.js - NodeJS Firebase 引用错误 : firebase is not defined at Object. <匿名>