我有一个流星应用程序,它在启动时会播放一个mongo db文件:
Meteor.startup(function () {
Dynamics.remove({});
Dynamics.insert({ name : "voteTimer", time : 0 });
Dynamics.insert({ name : "winningWord", content : "" });
});
这些在React组件中调用,例如:
getMeteorData() {
return {
winningWord: Dynamics.findOne({name: "winningWord"}).content
}
},
在我的本地机器上,这很好用。然而,一旦通过meteor部署部署,应用程序崩溃:
Cannot read property 'content' of undefined
这表示Dynamics集合中没有文档。更奇怪的是,我仍然可以在chrome dev控制台中访问这些变量。
答案 0 :(得分:1)
即使您启动在启动时插入项目,这些插入也是异步的,您的组件getMeteorData
可能仍会尝试在插入文档之前获取文档。由于getMeteorData
是被动的(我认为),您只需要检查您的findOne是否返回正确的文档,它应该在文档准备好后立即生效:
getMeteorData() {
var dynamic = Dynamics.findOne({name: "winningWord"});
if (dynamic) {
return {
winningWord: dynamic.content
}
}
return {winningWord:""}; // whatever
},