我正在查看一些教程,在那里我找到了一段我坚持的代码。请帮助我理解这段代码。我在评论中标记了这些问题。
Code
UserSchema.pre('save', function(next){ //this is a pre hook which is used.understood.
var user = this; // what is the function of this?
var SALT_FACTOR = 5;
if(!user.isModified('password')){ //not understood.From where this function arises?I did not found this anywhere in mongoose tutorial/api.
return next();
}
bcrypt.genSalt(SALT_FACTOR, function(err, salt){
if(err){
return next(err);
}
答案 0 :(得分:1)
A"预先保存" Mongoose中的中间件是"文档中间件" 。
...在文档中间件中,
this
指的是正在更新的文档。
因此this
指的是要保存的文档。
这也提供了isModified
是什么的线索:它是一种文档方法,可用于检查特定字段{@ 1}}是否已被修改,因为早先从数据库中检索了文档。
在您发布的代码中,如果密码未被更改,则无需再次哈希(使用password
),以便跳过该步骤调用bcrypt
并从中间件返回。
next
:http://mongoosejs.com/docs/api.html#document_Document-isModified