Node.js Mongoose虚拟设定器似乎不起作用
我的猫鼬版本是4.0.7。 我的模式中有以下虚拟对象:Node.js Mongoose虚拟设定器似乎不起作用,node.js,mongodb,database-schema,Node.js,Mongodb,Database Schema,我的猫鼬版本是4.0.7。 我的模式中有以下虚拟对象: ProjectSchema.virtual("idName") .get(function(name){ return this.duration + this.name; }); ProjectSchema.virtual("deadline") .set(function(period){ this._deadline = period; co
ProjectSchema.virtual("idName")
.get(function(name){
return this.duration + this.name;
});
ProjectSchema.virtual("deadline")
.set(function(period){
this._deadline = period;
console.log(this._deadline);
}).get(function(){
return this._deadline;
console.log("got");
});
ProjectSchema.set("toJSON", {getters:true,virtuals:true});
ProjectSchema.set("toObject", {getters: true,virtuals:true});
所以我的第一个虚拟名为“idName”,我只是为了测试它工作得很好。
当我打电话时:
db.Project.findOne({name:proj.name},function(err,data){ console.log(data.get("idName"));});
然而,对于我的“截止期”虚拟机,同样的操作也适用于未定义的setter日志,这非常奇怪。事实上,我是这样测试的:
var newproject = new db.Project({
_id:Math.floor(Math.random()*934959349),
name: proj.name,
desc: proj.desc,
duration: proj.duration,
team: proj.team,
leader: proj.leader,
deadline: "2 weeks"
});
newproject.save();
我不明白为什么虚拟与setter和getter的结合不起作用。基本上,我在我的用户模式中有相同的设置:
UserSchema.virtual('password')
.set(function(password) {
this._plainPassword = password;
this.salt = crypto.randomBytes(32).toString('base64');
//more secure - this.salt = crypto.randomBytes(128).toString('base64');
this.hashedPassword = this.encryptPassword(password);
})
.get(function() {
return this._plainPassword;
});
我不明白为什么这对setter和内部变量有效,而“deadline”虚拟无法工作。请帮助请解释一下“似乎不起作用”和“不起作用”的含义。是否有错误消息?如果是,请将其添加到问题中。无错误消息。data.get(“截止日期”)未定义。而另一个虚拟(“idName”)是在没有setter的情况下初始化的,它与data.get(“idName”)一起工作,并在我将数据转换为JSON或带有data.toObject()或data.tojson的对象时与其他属性一起返回。请解释一下“似乎不起作用”和“不起作用”的含义。是否有错误消息?如果是,请将其添加到问题中。无错误消息。data.get(“截止日期”)未定义。而其他虚拟(“idName”)是在没有setter的情况下初始化的,它与data.get(“idName”)一起工作,并在我将数据转换为JSON或使用data.toObject()或data.toJSON的对象时与其他属性一起返回