Meteor:访问用户信息的正确方法

时间:2015-06-07 01:19:03

标签: mongodb meteor querying

我是meteor的新手,我正在构建我的应用程序,但我遇到了一些"最佳实践"的问题。

我有三个数据库。一个用户,一个用于问题,一个用于答案。把我的网站想象成各种各样的quora。

我正在迭代这些问题,而且我很难访问用户信息。在记录问题的那一刻,我记录了问题,我只记录用户的ID。来自rails背景,这通常是我需要在需要时访问所有其他信息。我没有记录姓名和所有其他信息。

我的问题是访问用户信息的正确方法是什么?我正在进行每个循环,似乎Meteor.user仅适用于登录用户(基本上仅用于我的信息)。我似乎无法在问题帮助器上执行类似Meteor.users.find({_ id:this.user_id})的操作,以便我可以获取每个用户信息。它没有像这样检索。

在我看到的例子中,他们通常会在问题数据库中记录信息。所以他们会记录第一个,姓氏和其他任何必要的东西。但这似乎是我记录两次信息。

访问此信息的正确方法是什么?我应该在发布问题时记录它还是应该每次都从用户数据库中调用它?

我尝试通过服务器方法访问信息,但似乎无法让它工作。已经有一段时间了,所以我应该问一下。

提前致谢!!

2 个答案:

答案 0 :(得分:2)

我的解决方案就是保存db中的user_id字段,就像你现在正在做的那样,

如果您保存firstnamelastname以及将来可能会更改的问题(考虑到大多数网站都可以选择更改名称)

  

我似乎无法做像Meteor.users.find({_ id:   this.user_id})

这是因为用户数据在客户端不可用,这就是你无法看到数据的原因

解决方案是在向客户发布问题时,您应该发布用户的信息

示例

Meteor.publish('question,function(question_id){
  var question = Question.findOne(question_id);
  //get info of the question user
  var user = Meteor.users.find({_id: question.user_id });

//you cannot publish findone result, so do another query
  var ques_rec= Question.find({_id: question_id});

  return [ques_rec, user];
});

现在,在客户端执行此操作时,我似乎无法执行Meteor.users.find({_id: this.user_id})之类的操作,您将获得用户数据。

答案 1 :(得分:0)

我想我找到了解决方案。我没有关闭autopublish,所以这似乎现在正在工作。

Template.questionItem.helpers({
  user: function(){
    user = Meteor.users.find({_id: this.user_id}).fetch();
    return user[0]
  }

我认为基本上你可以搜索用户,但出于某些原因,如果我这样做

 Meteor.users.find({_id: this.user_id}) 

它返回一个对象,我似乎无法找到实际数据。

但是如果我在最后添加.fetch(),它将为用户返回一个数组。因此,如果将其声明为变量,我可以通过说user [0]来访问所有信息。

我不确定这是否是在流星中做到这一点的最佳方法,但它似乎确实有效。

所以,当我在把手中调用物体时,我会说:

{{user.profile.name}}

我认为一旦我关闭自动发布,我将不得不做同样的事情,但从服务器端。