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

我的用户中有一个电话字段。问题是我无法将其发送到前台(安全性和全部)。所以我想做一个虚拟的领域,以了解该用户是否给了他的电话。

此处架构:

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的同时仍保护手机

感谢您的帮助

tomtomtom3 回答:从未选中的受保护字段中获取虚拟字段

用电话查询,然后使用toObject()将文档转换为JS对象。然后从该对象中删除手机。然后将对象返回给客户端。

示例:

const users = await userSchema.find({});
const usersObj = users.toObject();
usersObj.forEach(doc => {
  doc.phone = undefined;
})
res.end(usersObj);
本文链接:https://www.f2er.com/3138345.html

大家都在问