javascript - 在 Sequelize Hooks 中使用 Promise

标签 javascript mysql node.js orm sequelize.js

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

这是我使用 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;
        });
}

我无法使用这样的 Hook 设置来创建用户。我没有收到错误,但什么也没发生——没有用户被创建/保存到数据库中。如果我更改我的 _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);
        });
}

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

非常感谢您的帮助! :)

最佳答案

你可以在这里使用sequelize promises

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

关于javascript - 在 Sequelize Hooks 中使用 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344881/

相关文章:

javascript - 除单击的内容外,div 内的所有 anchor 都会淡出

mysql - MySQL 在选择组中最好的时候的奇怪行为

javascript - meteor .js 错误 : Exception from sub xGHk6PkFTQ9uv8ncg TypeError: Cannot call method 'find' of undefined

javascript - 我在 Windows 8 中从 Visual Studio 2012 执行程序后,Node.js 控制台立即关闭

javascript - 如何使用 JavaScript 更改 Canvas 上图像的窗口级别

javascript - 我们可以在悬停时使用相同的 jquery 功能两次,在单击时使用另一次吗?

mysql - 使用嵌套 MySQL 查询打印一张表中的所有行

mysql - SQL 需要 'with' 命令

arrays - Mongodb 对聚合方面的两个相似数据数组进行分组和求和

javascript - 检查 typescript 中特定对象是否为空