我刚开始使用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 );
答案 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
}
});