【问题标题】:Using Promises in Sequelize Hooks在 Sequelize Hooks 中使用 Promise
【发布时间】:2014-10-10 06:41:41
【问题描述】:

Sequelize documentation I've read that you can use callbacks or return promises inside your hooks。但是,以下代码对我不起作用——对于最新的 1.x 和 2.x 版本的 Sequelize。

我设置了用户模型:

var User = function(sequelize, DataTypes) {
    var User = sequelize.define('User', {
        firstName: DataTypes.STRING,
        lastName: DataTypes.STRING,
        email: DataTypes.STRING,
        password: DataTypes.STRING
    }, {
        hooks: {
            beforeUpdate: _hashPassword,
            beforeCreate: _hashPassword
        }
    });

    return User;
};

这是我使用 Promise 对用户密码进行哈希处理的函数(不起作用):

function _hashPassword(user) {
    if (!user.getDataValue('password')) {
        return Promise.reject();
    }

    return bcryptGenSalt(10)
        .then(function(salt) {
            return bcryptHash(user.getDataValue('password'), salt);
        })
        .then(function(hash) {
            user.setDataValue('password', hash);

            return user;
        });
}

我无法使用这样的挂钩设置创建用户。我没有收到错误,但没有任何反应——没有用户被创建/保存到数据库中。如果我更改我的_hashPassword(user) 方法以在成功时调用回调函数而不是返回承诺,则会创建用户并成功散列密码:

这是我使用回调的哈希函数(有效):

function _hashPassword(user, cb) {
    if (!user.getDataValue('password')) {
        return Promise.reject();
    }

    bcryptGenSalt(10)
        .then(function(salt) {
            return bcryptHash(user.getDataValue('password'), salt);
        })
        .then(function(hash) {
            user.setDataValue('password', hash);

            cb(null, user);
        });
}

我真的很想为此使用承诺来保持一致。我错过了什么吗?这是一个错误还是文档中有错误?这种行为在我最新的 1.x 和 2.x 版本的 Sequelize 中是相同的。

非常感谢您的帮助! :)

【问题讨论】:

  • 将 Promise 返回给 hook 可能只对 master 有效。
  • 有人确认了吗?我相信我遇到了同样的问题,但在 Master 分支上(虽然稍微落后)。

标签: javascript mysql node.js orm sequelize.js


【解决方案1】:

你可以在这里使用 sequelize promises

return sequelize.Promise.reject('Some Error');

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多