这可能是基于意见的。但是我想得到一些建议。
所以,我想做的事情可以用this thread中提到的方式完成。 但是this thread提出了我想要使用异步的原因。
这是我到目前为止所做的,并且有效。
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异步,我必须将加密的密码保存在另一个查询中。我的直觉告诉我,使用secryize的bcrypt异步可能有更好的方法。
我的问题是,什么是首选/更好的方法?或者我应该同步使用bcrypt吗?
答案 0 :(得分:3)
Async是一种方法,只需整理你的代码并在钩子中使用回调
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);
});
});