2017-08-06 94 views
0

我試圖在模型上實現實例函數。它會檢查expiresAt字段的模型實例值是否超出特定的時間戳。這是我的架構Mongoose,訪問實例方法內的實例字段的正確方法

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);

什麼是訪問方法內實例字段正確的方法?

回答

2

您在您的方法中使用了arrow function,這會更改this值的綁定。

定義function() {}您的貓鼬方法,保持this價值您的實例。

MySchema.methods.isExpired = function() { 
    console.log(this.expiresAt) // is now defined 
    return (this.expiresAt < (Date.now()-5000)) 
}; 
+0

非常感謝@drinchev,我不知道這個在箭頭函數中的狀態 –