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提供的范围内调用。