0
所以我有这个方法的模式:我对实例方法有什么误解?
UserSchema.methods.comparePassword = (candidatePassword) => {
let candidateBuf = Buffer.from(candidatePassword, 'ascii');
if (sodium.crypto_pwhash_str_verify(this.password, candidateBuf)) {
return true;
};
return false;
};
它正是如此呼吁:
User.find({ username: req.body.username }, function(err, user) {
isValid = user[0].comparePassword(req.body.password);
// more stuff
}
这导致Error: argument hash must be a buffer
我能够验证用户[0]是一个有效的用户,显然是因为它成功地调用了comparePassword
方法,并且它是失败的libsodium函数。
进一步的测试显示this.password
未定义。实际上,在comparePassword
方法中,this
未定义。我的理解是,this
将引用调用方法的对象,在这种情况下,user[0]
。
那么引用调用它自己的实例方法的对象的正确方法是什么?