我们在学习node 的时候,我遇到了 事务问题,这个写的有点暴力

const { db, s_db } = require('./libs/db');
//  当我们将原生的和封装过的,全封装好之后,我们就可以
// 测试事务了! 是不是很happy 


const promise = new Promise((resolve, reject) => {
    s_db.getConnection((err, conn) => {
        if (err) {
            reject(err)
        } else {
            resolve(conn);
        }
    })
})

setTimeout(async () => {
    // 拿到connection ,剩下的我来处理下
    let conn = await promise;
    conn.beginTransaction(err => {
        if (err) {
            throw err;
        } else {
            console.log("开启事务成功")
            conn.query("delete from 01users where ID = 2000008", function (e, rows, fields) {
                if (e) {
                    conn.rollback((err) => {
                        throw err;
                    })
                } else {
                    conn.query("delete from 01users where ID = 2000009", (e, rows, fields) => {
                        if (e) {
                            conn.rollback((err) => {
                                throw err;
                            })
                        } else {
                            //提交事务
                            conn.commit(function (err) {
                                if (err) {
                                    conn.rollback(function () { if (err) { return err; } });
                                }
                                //关闭连接
                                conn.release();
                            });
                        }
                    })
                }
            });
        }
    })
})



db.js

const mysql = require('mysql')
const co = require('co-mysql')

//把数据库的密码,账号,地址,端口,表格都连接上!!
var conn = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '123456',
    port: '3306',
    database: 'action1'//上文说的名字
});

// 由于用到了事务,所以我还是把原声的也暴露出去!
module.exports = {
    db: co(conn),
    s_db: conn
}

事物这个东西,你首先要保证你的数据库,支持,否则你写也没用,实际开发过程中,

不要真正的删除数据,而是打个flag 这样若是出错的话,我们就全部重新改过来,无须事物也能搞定问题!

类似如下写法,用的co-mysql

有些同学,说co-mysql 过时了,那就就去研究mysql2

猜你喜欢

转载自blog.csdn.net/qq_15009739/article/details/108272894