我陷入困境,尝试使用pre
中间件向mongoose模型添加一些预逻辑,并且无法像往常一样访问this
实例。
UserSchema.pre('save', next => {
console.log(this); // logs out empty object {}
let hash = crypto.createHash('sha256');
let password = this.password;
console.log("Hashing password, " + password);
hash.update(password);
this.password = hash.digest('hex');
next();
});
问题:*有没有办法访问this
实例?
答案 0 :(得分:30)
胖箭头符号(=>
)在这种情况下无用。相反,只需使用旧式的匿名函数表示法:
UserSchema.pre('save', function(next) {
...
});
原因是胖箭头在词法上将函数绑定到当前范围(更多关于here,但是TL; DR:胖箭头符号并不是通用的快捷符号,它具体是指创建词法绑定函数),而函数应该在Mongoose提供的范围内调用。