在Sequelize Hooks中使用Promise

时间:2014-08-16 23:15:25

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

Sequelize documentation I've read that you can use callbacks or return promises inside your hooks中的

。但是,以下代码无法为我工作 - 对于Sequelize的最新1.x和2.x版本。

我设置了用户模型:

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;
};

这是我使用promises(不起作用)哈希用户密码的函数:

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)方法以在成功时调用回调函数而不是返回promise,则会创建用户并成功对密码进行哈希处理:

这是我使用回调(工作)的哈希函数:

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);
        });
}

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

非常感谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

你可以在这里使用sequelize promises

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