从MongoDB返回字段的Meteor在控制台中工作,但在应用程序中不工作

时间:2014-07-01 08:18:31

标签: mongodb meteor

我正在尝试读取MongoDB数据库中的文件。在控制台中,响应是正确的,而在我的应用程序中,我收到以下错误:

  

未捕获的TypeError:无法读取未定义的属性'iati'

我定义了一个模板助手,它应该返回MongoDB集合中的某个子字段。但是以下似乎不起作用(我得到了前面提到的错误)。

 Template.hello.helpers({
    test: function() {
        return Test.findOne().iati;
    }
});

似乎工作的是返回整个对象:

 Template.hello.helpers({
    test: function() {
        return Test.findOne();
    }
});

然后调用模板中的特定字段:

{{test.iati}}

但是,我想使用JavaScript脚本中的数据。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

Tests.findOne()这样的集合方法会将已经提取的文档返回给客户端的Minimongo副本。在提取文档之前,findOne()将返回null。

为了防范这种情况,只需在继续计算之前检查帮助中的结果:

Template.hello.helpers({
  test: function() {
    if(! Test.findOne()) return;
    return Test.findOne().iati;
  },
});

您还可以在Iron Router中等待订阅,以确保加载正确的文档:

this.route('routeName', {
  ...
  onBeforeAction: function() {
    this.subscribe('subscriptionName').wait();
    ...
  },
  ...
});