【问题标题】:Why is the following Meteor/mongodb findOne returning undefined?为什么以下 Meteor/mongodb findOne 返回未定义?
【发布时间】:2014-12-06 22:22:48
【问题描述】:

代码:

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

    console.log currentChapter
    console.log currentChapter.content

我得到以下输出:

未定义

来自跟踪器的异常 afterFlush 功能:无法读取未定义类型错误的属性“内容”:

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

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

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

编辑:

奇怪,如果我这样做了

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

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

Object

【问题讨论】:

标签: javascript mongodb meteor coffeescript


【解决方案1】:
  1. coffeescript 中的两个表达式完全一样

    章节.findOne( _id: "Wdyxj8pWg2HPzuDuf" )

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多