【问题标题】:Didn't get response from the query when creating DB Pool. Nodejs Mysql创建 DB 池时没有从查询中得到响应。 Node.js Mysql
【发布时间】:2023-01-23 07:20:38
【问题描述】:

早些时候我正在使用单个连接,但现在我正在尝试使用 Mysql 在 Nodejs 中创建一个数据库池。

我正在按照单一模式或基于类的模式来创建查询和其他操作

早期配置(一切正常)

const connection = mysql.createConnection({
  host: dbConfig.HOST,
  user: dbConfig.USER,
  password: dbConfig.PASSWORD,
  database: dbConfig.DB
});

connection.connect();
connection.query("SET AUTOCOMMIT=false;", (err) => {
  if(err){
    console.log(err)
    console.log("Couldn't set auto commit to false")
  }else{
    console.log("AutoCommit set to false")
  }
});

function query(sql, params, autorollback) {
  return new Promise((resolve, reject) => {
    //let currentTime = new Date().valueOf();
    let query = connection.query(sql, params, (err, resp) => {
      if(err && autorollback) {
        return resolve(rollback(err));
      }
      else if (err) {
        console.log(err)
        return reject(err);
      }
      //console.log("Time Taken: ", new Date().valueOf() - currentTime, "\n", query.sql);
      //console.log(resp);
      resolve(resp);
    });
  });
}

创建池配置(未获得查询的响应)

const connection = mysql.createPool({
    host: dbConfig.HOST,
    user: dbConfig.USER,
    password: dbConfig.PASSWORD,
    database: dbConfig.DB,
    connectionLimit: 4,
});

connection.getConnection(function (err, conn) {
    conn.query("SET AUTOCOMMIT=false;", (err) => {
        if (err) {
            console.log(err)
            console.log("Couldn't set auto commit to false")
        } else {
            console.log("AutoCommit set to false")
        }
    });
});

function query(sql, params, autorollback) {
    console.log(sql)
    return new Promise((resolve, reject) => {
        //let currentTime = new Date().valueOf();
        connection.getConnection(function (err, conn) {

            if (err) {
                console.log(err)
                return reject(err);
            }
            let query = conn.query(sql, params, (err, resp) => {
                console.log(sql)
                if (err && autorollback) {
                    return resolve(rollback(err));
                }
                else if (err) {
                    console.log(err)
                    return reject(err);
                }
                //console.log("Time Taken: ", new Date().valueOf() - currentTime, "\n", query.sql);
                //console.log(resp);

                resolve(resp);
                conn.release();
            });
        })
    });
}

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    您不必在此处将 autocommit 设置为 false。 beginTransaction() 方法默认将自动提交设置为 false。您已明确调用 conn.commit(),以便让您的 beginTransaction() 中的查询在此处产生任何效果。

        connection.getConnection(function (err, conn) {
            conn.beginTransaction((err) => {
                conn.query("YOUR_SQL_QUERY_GOES_HERE", (err) => {
                    if (err) {
                        conn.commit();
                    } else {
                        console.log("Failed")
                    }
                });
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多