为什么下面的Meteor / mongodb findOne返回undefined?

时间:2014-10-12 03:34:58

标签: javascript mongodb meteor coffeescript

代码:

Template.chapterForm.rendered = ->
  Meteor.startup ->    
    currentChapter = Chapters.findOne(
      _id: "Wdyxj8pWg2HPzuDuf"
    )

    console.log currentChapter
    console.log currentChapter.content

我得到以下输出:

  

未定义

     

Tracker afterFlush的例外情况   function:无法读取未定义TypeError的属性'content':

     

无法读取未定义的属性“内容”

我很困惑。这是CoffeScript错误还是Meteor / mongodb错误?

(我尝试将代码移到文件的顶部。仍然未定义)

修改

奇怪,如果我这样做

Chapters.findOne({_id: "Wdyxj8pWg2HPzuDuf"});

在控制台中我得到了对象:

Object

1 个答案:

答案 0 :(得分:2)

  1. 以下两个表达式在coffeescript中完全相同

    Chapters.findOne(       _id:“Wdyxj8pWg2HPzuDuf” )

    Chapters.findOne({_ id:“Wdyxj8pWg2HPzuDuf”})

  2. 我不知道你为什么使用'Meteor.startup - >'在模板实例中,这不是好方法。在Meteor docs中,“在客户端上,该函数将在DOM准备就绪后立即运行。”因此,在创建或呈现屏幕后立即运行findOne操作。我认为它可能会毁掉Template实例的生命周期顺序,所以只需使用'created'和'rendered'循环。

  3. 此外,从#2开始,在生命周期中,您应该在获取它之前订阅该集合(findOne),某处父模板或路由器代码。

  4. 所以结论是你的浏览器mini-mongo似乎没有数据。 这意味着您需要使用'Chapters.find()。fetch()'命令检查浏览器控制台,然后如果您可以在控制台上看到数据但仍然存在相同的错误,则应检查生命周期订阅清楚。