Javascript Meteor用户ID存在,但用户未定义

Javascript Meteor用户ID存在,但用户未定义,javascript,node.js,meteor,meteor-accounts,Javascript,Node.js,Meteor,Meteor Accounts,渲染我的react组件时,我得到的是Meteor.user()null。然后我尝试访问Meteor.userId(),并将其作为登录用户的id进行了更正。我还尝试通过Meteor.users.findOne()访问该用户,但未成功 我的问题是,尽管用户ID是可访问的,但为什么用户对象未定义? 我使用以下代码段进行测试: var uid = Meteor.userId(); console.log(uid); // printed t

渲染我的react组件时,我得到的是
Meteor.user()
null
。然后我尝试访问
Meteor.userId()
,并将其作为登录用户的id进行了更正。我还尝试通过
Meteor.users.findOne()
访问该用户,但未成功

我的问题是,尽管用户ID是可访问的,但为什么用户对象未定义?

我使用以下代码段进行测试:

var uid = Meteor.userId();
console.log(uid);                                 // printed the _id correctly

var usr = Meteor.user();                
console.log(usr);                                 // undefined 

var usr1 = Meteor.users.findOne({_id: uid});
console.log(usr1);                                // undefined 
Meteor.userId()
在登录时立即可用
Meteor.user()
要求通过DDP将对象传递到客户端,因此无法立即使用

默认情况下,将发布
配置文件
键。由于已关闭“自动发布”,您可能希望从用户发布自己的特定密钥集

我通常有:

服务器:

Meteor.publish('me',function(){
  if ( this.userId ) return Meteor.users.find(this.userId,{ fields: { key1: 1, key2: 1 ...}});
  this.ready();
});
客户:

Meteor.subscribe('me');
您也可以发布关于其他用户的信息,但在那里,要共享的密钥列表通常要小得多。例如,您通常不想与登录用户共享其他用户的电子邮件地址。

Meteor.user()确实不直接可用,您可以尝试以下操作:

Tracker.autorun(function(){
  var uid = Meteor.userId();
  console.log(uid);                                 // printed the _id       correctly

  var usr = Meteor.user();                
  console.log(usr);                                 // undefined 

  var usr1 = Meteor.users.findOne({_id: uid});
  console.log(usr1);  
});

这应该首先打印未定义的用户,然后打印正确的用户。

您是在服务器上运行代码,客户端还是两者都运行?仅在客户端运行,并且您是否从服务器获取相应的发布以检索用户数据?否,未订阅任何特定的发布。我还删除了自动发布包。我需要订阅才能获得登录的it用户吗?