为什么这会导致服务器错误

时间:2014-08-27 00:54:05

标签: javascript meteor iron-router

我尝试在每个用户拥有的以下数组中发布由用户名创建的帖子。我将此添加到microscope practice app错误是I20140826-20:31:53.452(-4)?在Meteor.publish.Comments.find.postId [as _handler](app / server / publications.js:2:13)。在这里感谢先进的代码。

publications.js 循环应该发布由以下数组中的每个用户名发布的帖子。

Meteor.publish('posts', function(options) {
for (u=0;u<this.user.profile.following.length;u++) {
    f=profile.following[u].text();
    return Posts.find({username:f}, options);
  }
});

它会影响的路线

控制器

PostsListController = RouteController.extend({
  template: 'postsList',
  increment: 5, 
  limit: function() { 
  return parseInt(this.params.postsLimit) || this.increment; 
  },
  findOptions: function() {
    return {sort: this.sort, limit: this.limit()};
  },
  waitOn: function() {
    return Meteor.subscribe('posts', this.findOptions());
  },
  posts: function() {
    return Posts.find({}, this.findOptions());
  },
  data: function() {
    var hasMore = this.posts().count() === this.limit();
    return {
      posts: this.posts(),
      nextPath: hasMore ? this.nextPath() : null
    };
  }
});

NewPostsListController = PostsListController.extend({
  sort: {submitted: -1, _id: -1},
  nextPath: function() {
    return Router.routes.newPosts.path({postsLimit: this.limit() + this.increment})
  }
});

BestPostsListController = PostsListController.extend({
  sort: {votes: -1, submitted: -1, _id: -1},
  nextPath: function() {
    return Router.routes.bestPosts.path({postsLimit: this.limit() + this.increment})
  }
});

路由器地图

  this.route('newPosts', {
    path: '/new/:postsLimit?',
    controller: NewPostsListController
  });

  this.route('bestPosts', {
    path: '/best/:postsLimit?',
    controller: BestPostsListController
  });

1 个答案:

答案 0 :(得分:0)

您的发布功能有误,您是否知道您的循环没用,因为它在遇到第一次返回时退出了?

即使您聚合循环中累积的游标,这也不会起作用,因为目前发布函数只能从DIFFERENT集合中返回多个游标。

你需要在这里使用适当的mongo选择器,这可能是$in

此外,profile.following甚至没有在发布函数中定义,并且通过根据数组长度(profile.following.length)检查迭代器变量来完成对数组的迭代,或者更好地使用{{1 }或Array.prototype.forEach

我认为这是你正在尝试做的事情:

_.each

如果您正在阅读Meteor.publish("posts",function(options){ if(!this.userId){ this.ready(); return; } var currentUser=Meteor.users.findOne(this.userId); return Posts.find({ username:{ $in:currentUser.profile.following } },options); }); 本书,我认为他们为初学者提供了一些优秀的JS教程,那么在继续在Meteor中进一步挖掘之前,你一定应该阅读有关JavaScript本身的资源。