我正在尝试在Model上实现实例函数。它检查字段expiresAt
的模型实例的值是否超出特定时间戳。这是我的架构
let MySchema = new mongoose.Schema({
userId : { type : ObjectId , unique : true, required: true },
provider : { type : String, required : true},
expiresAt : { type : Number, required : true}
},{ strict: false });
这是实例方法
MySchema.methods.isExpired = () => {
console.log(this.expiresAt) // undefined
return ( this.expiresAt < (Date.now()-5000) )
};
但this.expiredAt
的值未定义。然后我尝试重写函数如下
MySchema.methods.isExpired = () => {
try{
console.log(this._doc.expiresAt);
console.log((Date.now()-5000));
return (this._doc.expiresAt < (Date.now()-5000));
} catch (e){
console.error(e);
}
};
这会导致异常
行TypeError: Cannot read property 'expiresAt' of undefined
的 console.log(this._doc.expiresAt);
访问方法中的实例字段的正确方法是什么?
答案 0 :(得分:5)
您在方法中使用arrow function,这会更改this
值的绑定。
使用您的mongoose方法的function() {}
进行定义,为您的实例保留this
值。
MySchema.methods.isExpired = function() {
console.log(this.expiresAt) // is now defined
return ( this.expiresAt < (Date.now()-5000) )
};