mongoose前/后midleware不能使用ES6访问实例
我有两难,试图使用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
实例?
胖箭头符号( =>
)在这种情况下是无用的。 相反,只需使用老式的匿名函数表示法:
UserSchema.pre('save', function(next) { ... });
原因在于胖箭头在词法上将函数绑定到当前范围(在这里更多,但是TL; DR:胖箭头符号并不是一个通用的快捷方式符号,它是专门用来创build词法绑定函数的)而函数应该在Mongoose提供的范围内调用。