【问题标题】:Querying Mongo returns empty array in Template.foo.onCreate in Meteor app查询 Mongo 在 Meteor 应用程序的 Template.foo.onCreate 中返回空数组
【发布时间】:2016-11-22 05:26:23
【问题描述】:

我在我的 Meteor 项目中获得此代码,在 client/main.js 文件中

Template.panel.onCreated(function loginOnCreated() {
  var profile = Session.get('profile');

  this.myvar = new ReactiveVar(User.find({}).fetch());
});

User.find({}) 的结果为空。如果我在其他任何地方查询这个(包括meteor mongo),我会得到一个用户数组。

所以我想知道这段代码在客户端运行是否有问题。在同一个文件中,我让这个查询在其他地方工作,但可能在服务器上下文中。

如何在加载模板/页面后立即使用 Mongo 结果填充此 ReactiveVar

如果我在服务器端做类似Meteor.startup() 的事情:

console.log(User.find({}).count());

它给了我正确的用户数量。马上。

@edit

如果我只是添加几秒钟的setTimeout(它不能只是 1 秒,它需要更长的时间),它在同一个地方工作。

Template.panel.onCreated(function loginOnCreated() {
//...
setTimeout(function(){
    template.timeline.set(User.find({}).fetch());
    console.log(timeline)
  },3000);
});

那么,有谁知道为什么要让我做这个手术需要这么长时间吗?任何解决方法?

【问题讨论】:

    标签: mongodb meteor reactive-programming meteor-methods


    【解决方案1】:

    User.find({}).fetch() 将仅提供服务器端的用户列表。

    您可能可以编写一个meteor 方法来获取服务器端的用户列表,并使用meteor.call 给它调用。

    在此调用的回调函数中,您可以将结果分配给所需的变量。

    【讨论】:

    • 什么方法?像 Method.methods 吗?如何在服务器端创建一个方法并从客户端调用?
    • 这个链接对方法调用细节很有帮助。guide.meteor.com/methods.html
    • 或者只是在 server.js 上启动代码结束后你可以创建简单的方法 --
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2022-12-22
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多