查询Meteor集合(适用于localhost,在服务器上失败)

时间:2015-11-14 18:59:26

标签: javascript mongodb meteor

我刚开始使用Meteor的小项目,有几个月的经验。我设置了一个名为Reactions的集合,并将csv数据导入MongoDB。

现在,当我从localhost(win 7)查询它时,我按预期获得了记录集,但是一旦我从远程服务器查询它,我就得到了emty set。

由于它似乎是订阅时间问题,因为该集合大约是10k记录,我在铁路由器路由中添加了'waitOn'子句,但它没有帮助。

我在这里和那里搜索类似的问题,并且大多数建议使用waitOn,所以我已经没有想法了。

请参阅以下相关代码,并提前感谢您提供任何提示

---------- / both / collections / Reaction.js  ----------------

Reactions = new Mongo.Collection('reactions', { idGeneration : 'MONGO'} );

---------- / server / publications.js  ----------------

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

---------- / client / views / subscriptions.js  ----------------

    Meteor.subscribe('reactions', function() {
          return Reactions.find();
    });

---------- / both / lib / router.js  ----------------

    this.route('reactions', {
        where: 'server',
        waitOn: function() { 
           return Meteor.subscribe('reactions');
        },
        action: function () { 
           var action = this.request.body.action; 
           var reactions = Reactions.find( { action: action } ).fetch();
           console.log( 'reactions.length = ' + reactions.length );

1 个答案:

答案 0 :(得分:0)

您的路线操作需要涉及渲染。您的find()可以在data:函数内运行。为什么where:功能?订阅需要在客户端上运行!

this.route('reactions', {
  waitOn: function() { 
    return Meteor.subscribe('reactions');
  },
  action: function () {
    this.render('myLayout'); 
  }, 
  data: function(){
    var action = this.request.body.action;
    return Reactions.find( { action: action } ); // you don't need to .fetch(), just return a cursor
  }
});