Mongodb 为什么我会得到这个';未定义';错误?

Mongodb 为什么我会得到这个';未定义';错误?,mongodb,meteor,iron-router,Mongodb,Meteor,Iron Router,我正在从事一个Meteor项目,由于某种原因,此配置文件模板拒绝工作 我正在使用以下代码以及帐户密码和帐户条目软件包进行用户管理: this.route('profile', { path: '/profile/:username', data: function() { var userDoc = Meteor.users.findOne({"username": this.params.username}); var bookCursor =

我正在从事一个Meteor项目,由于某种原因,此配置文件模板拒绝工作

我正在使用以下代码以及
帐户密码
帐户条目
软件包进行用户管理:

this.route('profile', {
    path: '/profile/:username',
    data: function() {
        var userDoc = Meteor.users.findOne({"username": this.params.username});
        var bookCursor = Books.find({owner: userDoc._id});
        return {
            theUser: userDoc,
            theBooks: bookCursor
        };
    }
});
当我尝试转到我的测试帐户的配置文件URL(“misutowolf”和“test2”)时,Chrome的开发控制台中出现以下错误:
来自Deps重新计算函数的异常:TypeError:无法读取未定义的
的属性“\u id”,指向调用
Books.find()
时使用的userDoc.\u id

这没有任何意义,因为我能够使用
meteor mongo
和两个用户名找到一个有问题名称的用户文档,格式为
db.users.find({username:“misutowolf”})
db.users.find({username:“test2”})


我很困惑,根本不确定是什么导致了这个问题。

默认情况下,Meteor只通过自动设置发布当前登录的用户信息

您需要做的是将您试图使用的用户信息(
用户名
)推送到客户端,因为如果不这样做,您正在访问的用户不会发布到客户端,并且在访问其
\u id
时会出现未定义的错误

首先,设置专用发布(在服务器上):

然后
waitOn

waitOn:function(){
  return this.subscribe("userByUsername",this.params.username);
}
最后,在将用户文档推送到客户端之前,请注意不要访问该文档,因为即使您正在等待订阅,
data
方法实际上也可能被调用,即使订阅尚未准备就绪

data: function() {
  var userDoc = Meteor.users.findOne({"username": this.params.username});
  if(!userDoc){
    return;
  }
  // ...
}

你真棒!我从未想过要搞砸发布/订阅,因为我的项目中仍然启用了自动发布。我想我只是觉得它对Meteor.users也有用,但我错了。非常感谢,你最近救了我好几次。:)在将用户文档推送到客户机之前,最好使用;只需在客户端的任何位置添加
Router.onBeforeAction('load')
,并像往常一样使用
data
功能。根据我的经验,添加
load
钩子并不能阻止
data
方法在
waitOn
列表准备就绪之前被调用。
data: function() {
  var userDoc = Meteor.users.findOne({"username": this.params.username});
  if(!userDoc){
    return;
  }
  // ...
}