Node.js、mysql 和事务与 util(async/await)

标签 node.js transactions node-mysql

如何将事务与 node.js、mysql、util 一起使用? 我的连接是由

创建的
    var mysql = require("mysql");
    var util = require("util");
    var connection = mysql.createPool({
        connectionLimit: 10000,
        acquireTimeout: 10000,
        host: process.env.HOST,
        user: process.env.AUSER,
        password: process.env.PASSWORD,
        database: process.env.DATABASE,
        dateStrings: true
    });
    connection.query = util.promisify(connection.query);
    module.exports = connection;

这里是示例请求:

addNewEvent: async function(req, res) {
  try{
    let strSql = "SELECT * FROM users"
    const user = await connection.query(strSql);

    //now I need insert something in other table but I have to use transaction
  }
  catch (error) {
    console.log(error);
  }
})

如果我在 try{ 之后添加此代码 const conn = await connection.beginTransaction(); 我会收到错误消息:

TypeError: connection.beginTransaction is not a function

最佳答案

池与连接不同。您必须从连接池中获取连接。

const connection = await util.promisify(pool.getConnection)();
await util.promisify(connection.beginTransaction)();
const user = util.promisify(connection.query)(strSql);

与其自己 promise 所有内容,您还可以使用一些可用的库之一,例如 mysql-promise,它们是 mysql 库的小包装器,已经具有 promise 的方法。

关于Node.js、mysql 和事务与 util(async/await),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52702992/

相关文章:

javascript - 使用 puppeteer 或 playwright,有没有办法更新最初在启动方法中传递的参数?

node.js - 如何从 NestJS/TypeORM 中父级的连接字段访问关系 ID

c# - 如何使用多线程处理 C# 中的列表?

java - EJB 事务类型

node.js - 如何使用 Mongoose 在 Node js 中将此出生日期转换为年龄

node.js - 从Node.js中的sendGrid发送电子邮件时"UnhandledPromiseRejectionWarning: Error: Forbidden"

ruby-on-rails - 如何在不启动 Rails 事务的情况下运行迁移?

javascript - 如何在node js和mysql中检查数据库连接是否成功

javascript - Node mysql插入当前日期

mysql - Sequelize Js - 如果不存在则创建新数据库