为什么下面的Meteor/mongodb findOne返回未定义

Why is the following Meteor/mongodb findOne returning undefined?

本文关键字:mongodb findOne 返回 未定义 Meteor 为什么      更新时间:2023-09-26

代码:

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

我得到以下输出:

未定义

跟踪器afterFlush出现异常函数:无法读取未定义类型的属性"content"错误:

无法读取未定义的属性"content"

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

(我试着把代码移到文件的顶部。仍然没有定义)

编辑:

奇怪,如果我做

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

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

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

    第章findOne(_id:"Wdyxj8pWg2HPzuDuf")

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

  2. 我不知道你为什么在模板实例中使用'Meteor.startup->',这不是一个好方法。在Meteor文档中,"在客户端上,一旦DOM准备好,函数就会运行。"因此findOne操作将在屏幕创建或渲染后立即运行。我认为这可能会破坏Template实例的生命周期顺序,所以只需使用"创建"answers"渲染"周期。

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

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