【问题标题】:Meteor cannot get data流星无法获取数据
【发布时间】:2015-07-11 22:09:32
【问题描述】:

我是新的流星,我有一个问题,我无法从 mongodb 收集(我使用铁路由器)

/client/routes.js

Router.route('/page', function(){
  this.render('page');
});

/client/foo.js

city = new Mongo.Collection('data');

if (Meteor.isClient) {

  Template.foo.helpers({
    data: function(){
      return city.find();
    }
  });

}

client/views/foo.html

<template name="foo">
    {{#each data}}
        {{> all_data}}
    {{/each}}
</template>
<template name="all_data">
    <li>{{city}}</li>
</template>

在 chrome 控制台中,命令 city.find() 给我:

L…n.Cursor {collection: LocalCollection, sorter: null, _selectorId: 未定义,匹配器:M…o.Matcher,跳过:未定义…}

在 mongo 控制台 db.data.find() 中它工作正常

我认为连接mongodb有问题

【问题讨论】:

  • 在您的客户端代码或控制台中尝试console.table (city.find().fetch());find() 方法返回一个游标,findOne() 或 find().fetch() 返回一个文档数组。
  • city.find().fetch() 仅返回 []findOne() 返回未定义
  • 如果您删除了自动发布包,请记住您需要定义allow-deny 规则和发布,以便在客户端访问您的数据。见discovermeteor.com/blog/…。您还需要在 both 文件夹中定义您的集合,因此它在服务器和客户端上都引用同一个集合(如果名称匹配,则不确定这是强制性的)。

标签: mongodb iron-router


【解决方案1】:

需要在服务器端和客户端都定义集合,以便自动发布工作 - /client 中的文件仅在客户端执行,因此服务器不知道 city = new Mongo.Collection('data');

移动文件

 /client/foo.js

进入父目录

 /foo.js

它可能会起作用

【讨论】:

  • 刚刚测试了它,除了你的模板被称为“foo”并且路由器正在呈现“页面”之外,它对我来说非常好用。将您渲染的页面名称更改为与模板名称相同,并将所有文件放在顶级目录中,然后再开始使用 /client 和 /server
  • 另外,您并没有说您已经删除了任何软件包,例如 insecureautopublish - 如果您的解决方案看起来会有所不同。 Ty创建一个新项目,只需添加meteor add iron:router并将文件移动到新项目的顶级目录,它应该适合你。
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多