我一直在关注Node.js教程。我总是怀疑数据如何传递给回调函数参数。作为一个例子
User.addUser(newUser, (err, user) =>{
if(err){
res.json({success: false, msg:'Failed to register new user'});
} else {
res.json({success: true, msg:'User registered'});
}
});
和addUser函数定义为,
module.exports.addUser = function(newUser, callback){
bcrypt.genSalt(10, (err,salt)=>{
bcrypt.hash(newUser.password, salt, (err, hash) => {
if(err) throw err;
newUser.password = hash;
newUser.save(callback);
});
});
}
我不明白错误和用户是如何通过的。有人可以解释一下吗?
答案 0 :(得分:0)
答案是newUser.save
也采用callback
参数并传递相同类型的参数。所以你可以直接将回调传递给save。我想user.save
看起来像下面这样:
User.prototype.save = function(callback) {
//do stuff to save the user
//maybe get an error in the process, or a user record, pass them to the callback
callback(saveError, userRecord)
}
由于save
和addUser
的预期参数相同,因此回调可以直接传递到save
。
编辑: 但是,如果从bcrypt调用返回一个错误,我建议调用你的回调。因为你已经有一个回调来给出错误,所以抛出没有多大意义。调用者会在回调中遇到错误,所以我建议这样做:
bcrypt.hash(newUser.password, salt, (err, hash) => {
if(err) {
callback(err, null)
return
}
...