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提供的范围内调用。
- Webstorm 10 mongoose未解决的function与mongoose-DefinitelyTyped安装
- 如何使用特定的集合Mongoose-Express-Mongodb(MEAN STACK)
- 如何正确构buildasynchronous节点代码
- 为什么mongodb发现()从来没有得到我的callback
- Mongoose地理查询不会返回正确的结果
- 是否有可能select查询select和他的索引数组中的元素?
- 如何使用select:false为字段创build虚拟属性
- 检查Node.js rest API上的资源所有权
- 实例上的Mongoose键/ val不会显示在JSON或控制台中。为什么?