node.js - 当用户输入错误的电子邮件时,为什么交易失败并已回滚

标签 node.js postgresql sequelize.js

我正在授权数据库中的电子邮件,但是当我输入错误的电子邮件时,它抛出事务无法回滚,因为它已完成状态:提交

export const signin = async (req, res) => {
  const { email, password } = req.body;
  const transaction = await db.sequelize.transaction();
  try {
    const user = await db.User.findOne({ where: { email } }, { transaction });
    await transaction.commit();
    const passBool = Auth.comparePassword(password, user.password);
    if (user && passBool) {
      return res.json({
        success: 1,
        user,
        message: 'signed in'
      });
    }
    res.json({ success: 0, message: 'wrong username or password' });
  } catch (ex) {
    await transaction.rollback();
    res.json({ success: 0, message: 'wrong username or password' });
  }
};

最佳答案

我不确定为什么回滚在您的示例中不起作用,但您可以尝试:

  • 应该在查询的选项对象中传递一个事务:
    const user = await db.User.findOne({ where: { email }, transaction });
    
  • 您可以尝试使用托管事务,以避免手动处理提交/回滚:
    export const signin = async (req, res) => {
        const { email, password } = req.body;
        db.sequelize.transaction(async transaction => {
            const user = await db.User.findOne({ where: { email }, transaction });
            const passBool = Auth.comparePassword(password, user.password);
            if (user && passBool) {
                return res.json({
                    success: 1,
                    user,
                    message: 'signed in'
                });
            }
            res.json({ success: 0, message: 'wrong username or password' });
        }).catch(err => {
            res.json({ success: 0, message: 'wrong username or password' });
        });
    };
    
  • 关于node.js - 当用户输入错误的电子邮件时,为什么交易失败并已回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890307/

    相关文章:

    sql - 获取postgresql中hstore数据的每行键数

    postgresql - 为什么 postgres 容器在 Gitlab CI 中忽略/docker-entrypoint-initdb.d/*

    javascript - Sequelize 文档更新

    node.js - nodejs、postgres、sequelize - 而不是获取文件名,而是尝试获取完整路径

    mysql - Sequelize - 从关联表中返回单个列作为自定义列

    node.js - 无法从数组 $pull

    javascript - Node JS 与 C++ 集成

    node.js - 分配值时返回未定义的结果对象

    php - 如何在 Mac OS X (10.9.4) 中修复 'PHP' make?

    node.js - 没有代码签名就无法构建 Electron 应用程序