Meteor:访问客户端上的用户详细信息

时间:2016-04-02 18:25:38

标签: meteor meteor-blaze meteor-accounts

我正试图在流星的客户端访问(另一个)用户的详细信息。我有一个名为'userDetails'的服务器端方法,我正在从名为'acc'的模板助手调用。

服务器方法:

dataset = numpy.append(dataset, audio_array)

模板助手:

'userDetails': function(userId) {
      check(userId, String);
      return Meteor.users.findOne({_id: userId},
                                  {fields: {
                                    "services.facebook.first_name": 1,
                                    "profile.birthday": 1,
                                    "services.facebook.gender": 1,
                                    "profile.location.name": 1
                                  }});
    }

当我尝试在模板中访问acc.profile.birthday时,我什么都没得到。什么可能导致这种情况?

2 个答案:

答案 0 :(得分:2)

您必须在else语句中包含返回值。

if(error) {

}
else {
   return res;
}

异步调用方法。这意味着当服务器方法完成时将执行回调函数。

如果要在模板上显示结果,您有两种可能:

1 /使用会话。

acc: function(_id) {
  Meteor.call('userDetails', _id, function(err, res) {
    if(err){
    }else{
      Session.set('data', res)
    }

  });
  return Session.get('data')
}

2 /使用模板订阅(更好的解决方案): 在服务器上,您发布数据:

Meteor.publish("data", function(){
     return Meteor.users.findOne(...)
});

在客户端,您订阅:

Template.mytemplate.onCreated(function () {   
    Template.instance().subscribe("data");
});

然后直接在客户端上,您将能够创建一个帮助程序并调用findOne。

在html中:

  {{#if Template.subscriptionsReady}}
    {{#each myHelper}}
       {{acc.profile.birthday}}
    {{/each}}
  {{else}}
    <p>Loading...</p>
  {{/if}}

关于用户的重要通知: 默认情况下,用户个人资料可编辑。请阅读:https://dweldon.silvrback.com/common-mistakes

答案 1 :(得分:2)

Meteor调用是异步调用,这就是你的助手没有返回任何数据的原因。

此处的最佳选择是使用SessionReactiveVarReactiveDict

我将在这里使用Session选项

acc: function(_id) {
  Meteor.call('userDetails', _id, function(err, res) {
    if(err){

    }else{
      Session.set('userDetails', res)
    }

  });
  return Session.get('userDetails')
}

在你的html中你可以像这样使用这个帮助

{{#if acc}}
  {{name}}
  ...
{{else}}
  <p>Information not found</p>
{{/if}}