从受保护的未选中字段中获取虚拟字段

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);

以上是关于从受保护的未选中字段中获取虚拟字段的主要内容,如果未能解决你的问题,请参考以下文章

如何取得gridview中选中行中的某一字段

Javascript 在 Google 跟踪代码管理器中获取选中的单选字段的值 [重复]

JQgrid获取选中行的某个字段值

c#DataGridview 单击选中一行任何地方都可以获取name字段

c#DataGridview 单击选中一行任何地方都可以获取id字段

怎么用js 选中select的一个值自动带出其它字段的值