Mongoose,正确的方法来访问实例方法中的实例字段

时间:2017-08-06 08:24:40

标签: node.js mongoose mongoose-schema

我正在尝试在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);

访问方法中的实例字段的正确方法是什么?

1 个答案:

答案 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) )
};