NodeJS,MariaDB池连接提交不起作用

时间:2018-11-14 13:26:03

标签: javascript node.js database promise mariadb

我已经在互联网上进行搜索,但是找不到解决我问题的方法。 我正在使用带有池连接的NodeJS和MariaDB。 我从池中获得一个连接,进行了一个事务(没有错误),但是我看不到数据库内部有任何机会。 如果我不使用事务使用查询,只需使用pool.query(...),它就可以正常工作。我知道只需要一个查询就不需要事务,但是我只是为您简化了代码。

pool.getConnection()
.then(conn =>{
    conn.beginTransaction()
        .then(() =>{
            return conn.query("UPDATE Users SET forename='Tom' WHERE user_id=8")
        })
        .then(()=>{
            console.log("commit")
            conn.commit()
            //conn.end() --> doesn't change anything

        })
        .catch((err)=>{
            console.log(err.message);
            conn.rollback()
    })
});

这是怎么了?

谢谢!

2 个答案:

答案 0 :(得分:1)

这似乎是MariaDB驱动程序中的一个错误,其中conn.commit()并未实际提交。该错误已记录在here中。

在该评论中,建议通过手动调用COMMIT来解决此问题:

conn.query('COMMIT');

还请确保在完成连接后结束连接,以将连接释放回池中:

.then(()=>{
  return conn.query("COMMIT").then(() => {
    return conn.end();
  });
})
.catch((err)=>{
  return conn.query("ROLLBACK").then(() => {
    conn.end();
    throw new Error(err)
  });
})

答案 1 :(得分:1)

这是一个错误,正如@robertklep所指出的,一种解决方法是执行conn.query(“ COMMIT”)命令。

但是jira.mariadb.org/browse/CONJS-52是,并且已通过最新版本(2.0.1)进行了纠正