Mongodb 为什么我会得到这个';未定义';错误?
我正在从事一个Meteor项目,由于某种原因,此配置文件模板拒绝工作 我正在使用以下代码以及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 =
帐户密码
和帐户条目
软件包进行用户管理:
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;
}
// ...
}