Meteor:访问用户信息的正确方式
Meteor: The Correct way to access user information
我是 meteor 的新手,正在构建我的应用程序,但我 运行 遇到了一些 "best practice" 问题。
我有三个数据库。一种用于用户,一种用于问题,一种用于答案。将我的网站视为各种法定人数。
我正在遍历问题,但很难访问用户信息。在记录问题的那一刻,我记录问题,我只记录用户的 id。来自 rails 背景,这通常是我在需要时访问所有其他信息所需的全部内容。我不记录姓名和所有其他信息。
我的问题是访问用户信息的正确方法是什么?我正在做一个 each 循环,似乎 Meteor.user 仅适用于登录用户(基本上仅供我参考)。我似乎无法在问题助手上执行 Meteor.users.find({_id: this.user_id}) 之类的操作,以便我可以获得每个用户的信息。它不会像这样检索任何内容。
在我看到的例子中,他们通常记录问题数据库上的信息。所以他们会记录名字、姓氏和任何其他必要的东西。但这好像我在记录信息两次。
访问此信息的正确方法是什么?我应该在发布问题时记录它还是每次都从用户数据库中调用它?
我试过通过服务器方法访问信息,但似乎无法正常工作。已经有一段时间了,所以我应该问一下。
提前致谢!!
我的解决方案是像您现在所做的那样将 user_id 字段保存在数据库中,
如果您保存 firstname
或 lastname
问题,它们将来可能会更改(考虑到在大多数站点中我们都可以选择更改名称这一事实)
I can't seem to do something like 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})
您将获得用户数据的操作。
我想我找到了解决办法。我还没有关闭自动发布,所以这似乎暂时有效。
Template.questionItem.helpers({
user: function(){
user = Meteor.users.find({_id: this.user_id}).fetch();
return user[0]
}
我想基本上你可以搜索用户,但出于某种原因,如果我这样做的话
Meteor.users.find({_id: this.user_id})
它 return 是一个对象,我似乎找不到实际数据。
但是如果我在末尾添加 .fetch() 它将 return 一个用户数组。因此,如果将其声明为变量,我可以通过说 user[0] 来访问所有信息。
我不确定这是否是在 meteor 中执行此操作的最佳方法,但它似乎确实有效。
因此,当我在车把中调用对象时,我会这样做:
{{user.profile.name}}
我想一旦我关闭了自动发布,我将不得不从服务器端做同样的事情。
我是 meteor 的新手,正在构建我的应用程序,但我 运行 遇到了一些 "best practice" 问题。
我有三个数据库。一种用于用户,一种用于问题,一种用于答案。将我的网站视为各种法定人数。
我正在遍历问题,但很难访问用户信息。在记录问题的那一刻,我记录问题,我只记录用户的 id。来自 rails 背景,这通常是我在需要时访问所有其他信息所需的全部内容。我不记录姓名和所有其他信息。
我的问题是访问用户信息的正确方法是什么?我正在做一个 each 循环,似乎 Meteor.user 仅适用于登录用户(基本上仅供我参考)。我似乎无法在问题助手上执行 Meteor.users.find({_id: this.user_id}) 之类的操作,以便我可以获得每个用户的信息。它不会像这样检索任何内容。
在我看到的例子中,他们通常记录问题数据库上的信息。所以他们会记录名字、姓氏和任何其他必要的东西。但这好像我在记录信息两次。
访问此信息的正确方法是什么?我应该在发布问题时记录它还是每次都从用户数据库中调用它?
我试过通过服务器方法访问信息,但似乎无法正常工作。已经有一段时间了,所以我应该问一下。
提前致谢!!
我的解决方案是像您现在所做的那样将 user_id 字段保存在数据库中,
如果您保存 firstname
或 lastname
问题,它们将来可能会更改(考虑到在大多数站点中我们都可以选择更改名称这一事实)
I can't seem to do something like 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})
您将获得用户数据的操作。
我想我找到了解决办法。我还没有关闭自动发布,所以这似乎暂时有效。
Template.questionItem.helpers({
user: function(){
user = Meteor.users.find({_id: this.user_id}).fetch();
return user[0]
}
我想基本上你可以搜索用户,但出于某种原因,如果我这样做的话
Meteor.users.find({_id: this.user_id})
它 return 是一个对象,我似乎找不到实际数据。
但是如果我在末尾添加 .fetch() 它将 return 一个用户数组。因此,如果将其声明为变量,我可以通过说 user[0] 来访问所有信息。
我不确定这是否是在 meteor 中执行此操作的最佳方法,但它似乎确实有效。
因此,当我在车把中调用对象时,我会这样做:
{{user.profile.name}}
我想一旦我关闭了自动发布,我将不得不从服务器端做同样的事情。