2

在开始之前,我已经按照以下步骤操作: Meteor Querying other users by email

我已经阅读了有关发布用户以及如何添加比 id、用户名和配置文件更多的字段的 Meteor 文档。尽管有所有这些事情,我的情况仍然存在。

我正在尝试访问其他用户的电子邮件地址,而不仅仅是当前登录的用户。我有 2 个需要此访问权限的模板。第一个模板有效并且能够访问它。第二个模板不能。

这是我用于发布电子邮件字段和订阅的设置代码(我也尝试过不指定“地址”[例如字段:{电子邮件:1}],但结果相同)

if (Meteor.isServer) {
    Meteor.publish("allUsers", function () {
        return Meteor.users.find({});
    });
    Meteor.publish("allUserData", function () {
        return Meteor.users.find({}, {fields: {"emails.address": 1}});
    });
};

if (Meteor.isClient) {
    Meteor.subscribe("allUsers");
    Meteor.subscribe("allUserData");
};

以下是有效的模板代码:

Template.createPartner.events({
    'click .setup-partner' : function(event, template) {
        var partner = Meteor.users.findOne({"emails.address": 'example@mail.com' }); <-- works
    }
});

这是模板中不起作用的代码:

Template.infoSelect.partnerEmail = function() {
    var partnerId = Meteor.user().profile.partnerId; <-- works
    var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
    return partner.emails[0].address; <-- throws exception because the 'emails' field doesn't exist
};

我也试过这个,但没有区别:

var partner = Meteor.users.find({_id: partnerId}, {fields: {"emails.address": 1}});

为什么我在第二个模板中看不到用户的电子邮件地址,但在第一个模板中可以?

4

1 回答 1

4

我认为这是因为您订阅了两套相同的收藏。Meteor 使用第一个订阅并忽略第二个。我不确定为什么它会在某个场合起作用。

如果您删除第一个订阅并使用第二个它应该可以工作,基本上删除该行:

Meteor.subscribe("allUsers");

还有一个提示。您可以将电子邮件功能更改为:

Template.infoSelect.partner = function() {
    var partnerId = Meteor.user().profile.partnerId; <-- works
    var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
    return partner;
};

您的车把将是:(它只是为您的合作伙伴变量打开了更多选项,因此您也可以通过名称引用他/她)

<template name="infoSelect">
{{partner.email.0.address}}
{{partner.profile.name}} <!--If you have configured profiles -->
</template>
于 2013-02-10T21:24:14.840 回答