Node.js 从受保护而非选定字段获取虚拟字段
我的用户中有一个电话字段。问题是我不能把它发到前线(安全部门和所有部门)。所以我想做一个虚拟的字段来知道这个用户是否给了他的手机 此处为模式:Node.js 从受保护而非选定字段获取虚拟字段,node.js,mongoose,mongoose-schema,Node.js,Mongoose,Mongoose Schema,我的用户中有一个电话字段。问题是我不能把它发到前线(安全部门和所有部门)。所以我想做一个虚拟的字段来知道这个用户是否给了他的手机 此处为模式: const userSchema=新模式({ 电话:{type:String} },{ toObject:{virtuals:true}, toJSON:{virtuals:true} }); 此处虚拟: userSchema.virtual('hasPhone') .get(函数(){ 返回布尔值(this.phone); }) 我用这个来选择字段
const userSchema=新模式({
电话:{type:String}
},{
toObject:{virtuals:true},
toJSON:{virtuals:true}
});
此处虚拟:
userSchema.virtual('hasPhone')
.get(函数(){
返回布尔值(this.phone);
})
我用这个来选择字段:
constpublicfields=['-phone'];
userSchema.statics.publicOnly=函数(queryObject){
返回queryObject.select(publicFields);
}
并像这样使用它:
getUserById(userId,all=false){
const query=User.findById(userId);
返回(!all?User.publicOnly(查询):query.exec();
}
如果我在里面发送all=true,我就会得到电话
所以,在我的选择中,我排除了电话,但在这种情况下,虚拟机不再有电话,无法工作
我的目标是在保护手机的同时拥有hasPhone
感谢您的帮助通过电话查询并使用
toObject()
将文档转换为JS对象。然后从对象中删除电话文件。然后将对象返回给客户机
例如:
const users = await userSchema.find({});
const usersObj = users.toObject();
usersObj.forEach(doc => {
doc.phone = undefined;
})
res.end(usersObj);
事实上,我两者都需要,有电话和没有电话。我编辑了我的问题以显示如何访问它。所以我不能用你的答案,因为我不能选择我想要的。