无法从Meteor中获取任何数据库数据

时间:2015-06-29 15:36:51

标签: mongodb meteor iron-router

我完成了Meteor'简单todo'教程,并认为我已经掌握了它的工作原理的基本要点。但是我现在正在开始自己的项目,并立即遇到问题。

无论我尝试什么,我都无法从Meteor和我的模板中获取任何数据,甚至无法获得node.runAction(SKAction.sequence([animationWait, group([animationScale, animationAlpha])])) 。它总是console.log。我甚至通过终端中的undefined仔细检查了集合,我传入的数据是正确的。我甚至尝试过硬编码文档ID。

我希望有人可以指出我的代码明显错误。

这是当前的迭代不起作用,但我似乎已经尝试了我可以在网上找到的每个变体:

JS:

meteor mongo

HTML:

Pros = new Mongo.Collection("pros");

if (Meteor.isClient) {
  Meteor.subscribe("pros");
  Router.configure({
    layoutTemplate: 'main'
  });
  Router.route('/brief/:_id', function () {
    this.render('Brief', {
      data: function(){
            var proid = this.params._id;
            return Pros.findOne({ _id: proid });
        }
    });
  });
}
if(Meteor.isServer){
  Meteor.publish("pros", function () {
    return Pros.find();
  });
}

(我也在<template name="main"> <h1>Title here</h1> {{> yield}} </template> <template name="brief"> <h2>{{ name }}</h2> </template>

的foreach中尝试了上述内容

DB数据(通过终端中的find命令)

pros

我现在也尝试过以下没有产生任何不同结果的内容(它只是处于加载状态):

db.pros.find({});
{ "_id" : ObjectId("55915761145c29018ac97edb"), "name" : "Jimbob" }

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您在Meteor中使用的ObjectIDs不是默认值(Meteor在插入文档时会生成17个字符串而不是Mongo ObjectID)

尝试类似:

data: function () {
    Pros.findOne({ _id: new Mongo.ObjectID(this.params._id)});
}

答案 1 :(得分:1)

您不应在发布中使用findOne。它只返回一个对象,而不是光标。此外,将data字段添加回客户端路由。试试这个:

if (Meteor.isClient) {
  Router.configure({
    layoutTemplate: 'main'
  });
  Router.route('/brief/:_id', {
    loadingTemplate: 'loading',
    waitOn: function () {
      return Meteor.subscribe('pros', this.params._id);
    },
    data: function(){
      var proid = this.params._id;
      return Pros.findOne({ _id: proid });
    },
    action: function () {
      this.render('brief');
    }
  });
}

if(Meteor.isServer){
    Meteor.publish('pros', function(proId) {
        return Pros.find({_id: proId});
    });
}