Javascript 将Sequelize与bcrypt async一起使用

Javascript 将Sequelize与bcrypt async一起使用,javascript,node.js,sequelize.js,bcrypt,Javascript,Node.js,Sequelize.js,Bcrypt,这可能是基于意见的。但我想得到一些建议 所以,我想做的事情可以按照中提到的方式来做。 但我很好地说明了为什么我要使用异步 这是我到目前为止所做的,它是有效的 User.create({email: req.body.email, password: req.body.password}).catch(function(err){ console.log(err); }); User.beforeCreate(function(user) { const password = user.

这可能是基于意见的。但我想得到一些建议

所以,我想做的事情可以按照中提到的方式来做。 但我很好地说明了为什么我要使用异步

这是我到目前为止所做的,它是有效的

User.create({email: req.body.email, password: req.body.password}).catch(function(err){
  console.log(err);
});

User.beforeCreate(function(user) {
  const password = user.password;
  user.password = '';
  bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
    if(err) console.error(err);
    bcrypt.hash(user.password, salt, null, function(err, hash) {
      if(err) console.error(err);
      user.password = hash;
      user.save();
    });
  });
});
因为我使用的是bcrypt async,所以我必须在另一个查询中保留加密的密码。我的直觉告诉我,在sequelize中使用bcrypt async可能有更好的方法


我的问题是,首选/更好的方法是什么?或者我应该解决同步使用bcrypt的问题吗?

异步是一种方法,只需整理一下代码,并在钩子中使用回调

function cryptPassword(password, callback) {
    bcrypt.genSalt(10, function(err, salt) { // Encrypt password using bycrpt module
        if (err)
            return callback(err);

        bcrypt.hash(password, salt, function(err, hash) {
            return callback(err, hash);
        });
    });
}

User.beforeCreate(function(model, options, cb) {
  debug('Info: ' + 'Storing the password');    
  cryptPassword(user.password, function(err, hash) {
    if (err) return cb(err);
    debug('Info: ' + 'getting ' + hash);

    user.password = hash;
    return cb(null, options);
  });
});

谢谢你的回答。我不喜欢这种方法的主要原因是,将有两个sql调用来持久化一个新用户。只有一个sql调用,我们不在这里调用save,我们在sql调用被触发之前更改数据,您编写了不需要的save调用嗯。。。在生成密码哈希之前,记录可能会被保留,不是吗?因为它是异步的。它不会被保存,因为我们在这两种情况下都使用回调。文档中不清楚是否需要深入研究代码,文档更关注承诺,我参考了: