gpt4 book ai didi

node.js - Mongoose,在实例方法内访问实例字段的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:47 25 4
gpt4 key购买 nike

我正在尝试在模型上实现实例函数。它检查模型实例的字段值是否 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);

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

最佳答案

您正在使用arrow function在您的方法中,这会更改 this 值的绑定(bind)。

使用 mongoose 方法的 function() {} 进行定义,将 this 值保存到您的实例中。

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

关于node.js - Mongoose,在实例方法内访问实例字段的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com