2017-08-06 13 views
0

モデルにインスタンス関数を実装しようとしています。フィールドexpiresAtのモデルインスタンスの値が特定のタイムスタンプを超えているかどうかをチェックします。これは、これはインスタンスメソッドMongoose、インスタンスメソッド内のインスタンスフィールドにアクセスする正しいメソッド

MySchema.methods.isExpired =() => { 
    console.log(this.expiresAt) // undefined 
    return (this.expiresAt < (Date.now()-5000)) 
}; 

しかしthis.expiredAtの値が定義されていないです私のスキーマ

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 =() => { 
    try{ 
     console.log(this._doc.expiresAt); 
     console.log((Date.now()-5000)); 
     return (this._doc.expiresAt < (Date.now()-5000)); 
    } catch (e){ 
     console.error(e); 
    } 
}; 

を次のように私は機能を書き換えしようとしたこれは、メソッド内のインスタンスフィールドにアクセスするための正しい方法は何ですかラインconsole.log(this._doc.expiresAt);

ため

TypeError: Cannot read property 'expiresAt' of undefined例外の原因は?

答えて

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ありがとうございました。この機能のステータスについてはわかりませんでした –

関連する問題