从受保护的未选中字段中获取虚拟字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从受保护的未选中字段中获取虚拟字段相关的知识,希望对你有一定的参考价值。
我的用户中有一个电话字段。问题是我无法将其发送到前台(安全性和全部)。因此,我想做一个虚拟领域来了解该用户是否提供了他的电话。
这里架构:
const userSchema = new Schema(
phone: type: String
,
toObject: virtuals: true ,
toJSON: virtuals: true
);
此处为虚拟:
userSchema.virtual('hasPhone')
.get(function ()
return Boolean(this.phone);
)
而且我有这个来选择字段:
const publicFields = ['-phone'];
userSchema.statics.publicOnly = function (queryObject)
return queryObject.select(publicFields);
并像这样使用它:
getUserById(userId, all = false)
const query = User.findById(userId);
return (!all ? User.publicOnly(query) : 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);
以上是关于从受保护的未选中字段中获取虚拟字段的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 在 Google 跟踪代码管理器中获取选中的单选字段的值 [重复]
c#DataGridview 单击选中一行任何地方都可以获取name字段