nodejs使用mysql事务

2019-10-30  本文已影响0人  手持赤旗

谨慎使用事务,不然程序跑不动还不知道哪里出错了,直接贴上代码

class ConnectMysql{
    constructor(options) {
        this.Pool = null
        this.options = options
        this.options.charset = options.charset || 'utf8mb4'
        this.options.connectionLimit = options.connectionLimit || 100
        this.options.queueLimit      = options.queueLimit || 10000
        this.options.multipleStatements      = options.multipleStatements || true
        this.ConnectDB()
    }
    ConnectDB() {
        try {
            this.Pool = mysql.createPool(this.options)
        } catch (error) {
            throw new Error("connect DB error!!")
        }
    }
    transactions() {
        var self = this;
        if(!self.Pool) {
            self.ConnectDB();
        }
        if(self.Pool._close) {
            throw Error("db connection Pool closed");
        }
        return new Promise((resolve, reject) => {
            self.Pool.getConnection(function(err, connection) {
                if(err) {
                    reject(err)
                    return
                }
                if(!connection) {
                    console.error("sorry connect database fail!!")
                    reject(err)
                    return
                }
                
                connection.beginTransaction(function(err) {
                    if (err) {
                        console.error("beginTransaction fail!!")
                        reject(err)
                    }
                    connection.exc_query = function(sql) {
                        return new Promise((resolve, reject) => {
                            connection.query(sql, (error, results, fields) => {
                                if(error) {
                                    reject(error)
                                }
                                resolve(self.convertRows(results))
                            })
                        })
                    }
                    resolve(connection)
                  })
            })
        })
    }
    convertRows(rows) {
        if(!(rows instanceof Array)) {
            return [rows]
        }

        if(rows[0] && (rows[rows.length -1] instanceof Array)) {
            return rows[rows.length - 1]
        }
        return rows
    }
}
上一篇 下一篇

猜你喜欢

热点阅读