续集更新交易

Posted

技术标签:

【中文标题】续集更新交易【英文标题】:sequelize update transaction 【发布时间】:2016-07-27 23:21:18 【问题描述】:

我在 Nodejs 中使用 sequalize 事务,但我的问题是它不会在事务中获取我的 users 表并更新我的表

return sequelize.transaction(function (t) 
    var Users = objAllTables.users.users();
    return Users.update(updateUser, 
        where: 
            uid: sessionUser.uid,
            status: 'ACTIVE'
        
    , transaction: t ).then(function (result) 

       return Utils.sendVerificationEmail(sessionUser.uid, sessionUser.user_email)
            .then(function(data)
                 data = false;  
                if(data == false)
                        throw new Error('Failed Email');
                

            );


    ).then(function (result) 
        console.log(result);
        // Transaction has been committed
        // result is whatever the result of the promise chain returned to the transaction callback
    )

).catch(function(err)
    res.send(message:err.message)
)

控制台:

Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): START TRANSACTION;
Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): SET autocommit = 1;
Executing (default): UPDATE `users` SET `username`='edited' WHERE `uid` = 20 AND `status` = 'ACTIVE'
Executing (ad5247bd-18b8-4c6f-bb30-92744c7a5ac8): ROLLBACK;

正如您在控制台更新查询中所见,事务已用完

【问题讨论】:

我想在我的控制台中打印相同的执行。锄头这样做? @shumanachowdhury 您需要在连接到数据库时启用登录 sequelize 选项。见this 【参考方案1】:

transaction 密钥必须在options

return Users.update(updateUser, 
        where: 
            uid: sessionUser.uid,
            status: 'ACTIVE'
        ,
        transaction: t     //second parameter is "options", so transaction must be in it
    )

【讨论】:

如果我们使用sequelize的destroy方法呢?即 users.destroy() @AhmerSaeed destroy 只需要 1 个参数,您必须传递其中的所有选项。 users.destroy( where: id: 57 , transaction: t ) 对于任何搜索此内容的人(因为我偶尔会这样做),可以在此处找到更新功能的 sequelize 文档(因为在我看来 Google 并不总是能找到它):sequelize.org/master/class/lib/…

以上是关于续集更新交易的主要内容,如果未能解决你的问题,请参考以下文章

节点js。续集交易

续集expressjs中的事务未执行

PayPal Rest API - 使用更新的交易信息执行付款

MySQL算法更新银行交易(最终余额)

支付队列没有调用观察者对象来更新交易,为啥?

如何在捕获交易之前使用 Paypal 轻松更新订单?