【问题标题】:Cannot get meteor.js to return mongo collection无法让流星.js 返回 mongo 集合
【发布时间】:2015-05-07 01:31:00
【问题描述】:

所以我试图将 mongoDB 数据库值返回到 Meteor.js 项目中的模板。我正在使用的代码如下。

Template.ResourceManager.helpers({
BoosterOneFuel : function(){
        return resources.findOne({system : "booster1"}).fuel;
}

});

但是,这总是返回 null。当我尝试提醒它时,提醒还说这个值是空的。当我在运行 meteor mongo 时在控制台中运行此行时,Mongo 可以找到它:

db.Resources.findOne({system : "booster1"}).fuel;

但流星不能。 (这是在本地主机上,所以meteor mongo应该会影响meteor的数据库)

我认为在 mongo 之前加载流星不是问题,因为以下仍然不起作用:

if(resource.find({system : "booster1"}))
     alert(resources.findOne({system : "booster1"}).fuel);

有人知道这里发生了什么吗? 提前致谢。

【问题讨论】:

  • 您确定拼写吗?我看到Resourcesresourcesresource...
  • 你在客户端订阅资源集合吗?

标签: javascript mongodb meteor


【解决方案1】:

假设集合实际上被称为resources - 即你有一些看起来像:

resources = new Mongo.Collection('Resources');

那么听起来你只需要将文档发布给客户端:

server/publishers.js

Meteor.publish('resources', function() {
  return resources.find();
});

client/subscriptions.js

Meteor.subscribe('resources');

当然,订阅可能发生在您的模板或路由器中,而不是全局发生,但这超出了本问题的范围。

还请注意,您应该将guard 添加到您的助手。例如:

Template.ResourceManager.helpers({
  BoosterOneFuel : function() {
    var b1 = resources.findOne({system : "booster1"});
    return b1 && b1.fuel;
  }
});

【讨论】:

  • 嘿大卫....我正在关注 1.5 版的教程(收藏部分)。我有同样的问题。不知道怎么了。在流星控制台中查询显示文档。有没有办法调试这个,因为浏览器在这里不显示错误......?
  • 没有更多上下文,我不确定该建议什么。你确定你的助手(或任何引用集合的函数)被调用了吗?
  • 我喜欢的东西。我不完全理解import 我猜。教程说在客户端/服务器 main.js 中添加import '../imports/api/tasks.js';。我将其更改为 import {Tasks} from '../imports/api/tasks.js' 并解决了它。
猜你喜欢
  • 2016-01-11
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2013-01-02
  • 2016-05-15
  • 2017-09-14
相关资源
最近更新 更多