Meteor订阅数据未显示在Chrome控制台中

时间:2015-01-01 19:11:58

标签: javascript google-chrome meteor

我使用Differential's meteor-boilerplate作为简单应用的起点。目前它包括铁路由器1.0.6。

我想处理/ epidodes / 5等路线,它会根据episodeNumber属性显示Episode集合中的文档数据。

这是一个示例文档,我可以使用" meteor shell"来查询:

> Episodes.findOne({episodeNumber: 5})
{ title: 'Ingaus carsur diain nofaex deradisancom.',
description: 'Warde tu alde ationsome an. Ryretyening lowtheland iti combeex. Proset    mafacic lyed oan odiscon alsub isper. Es tiestionthe perconsiy lytion ac tioners inter mycal. Eded uernlarer indis u minca taladpaicar mycom. Cuopbleerpo tem ausin fored alersed mentfa eredal iterning peunbae ex. Oer omade the ican alfor pening. Thederder ingpro reumer esconex. Postions ery terre tionthepen aatcoming tyre beter protioni tionedpe riter. Toreraners typle erntyraa solyi. Themag alrei raat protionaset edcom cypro atapasi afthe iun edterfiassup.',
vimeoId: '80816872',
publishedOn: 510603296882,
free: false,
rating: 2,
episodeNumber: 5,
_id: 'Ewznhyex5puyccSFK' }

但是,它没有出现在Google Chrome的控制台中。

以下是相关文件:

集合/ episodes.js

Episodes = new Mongo.Collection('episodes'); 

routes.js

Router.map(function() {                                                                                              

// some other routes...

// the route where I'm stuck
this.route('episodesShow', {
  path: '/episodes/:episodeNumber',
  waitOn: function() {
    return Meteor.subscribe('episode', this.params.episodeNumber);
  },
  data: function() {
    return Episodes.findOne({episodeNumber: this.params.episodeNumber});
  }
});

服务器/ publications.js

Meteor.publish("episode", function(episodeNumber) {
  check(episodeNumber, String);
  return Episodes.findOne({episodeNumber: episodeNumber});
});

有关如何解决此问题以查看数据未在客户端显示的原因的任何指导将不胜感激。

3 个答案:

答案 0 :(得分:1)

我认为问题是我有另一个名为剧集的订阅,它与收藏品名称相同。

<强>集合/ episodes.js

Episodes = new Mongo.Collection('episodes');

服务器/ publications.js

Meteor.publish("episodes", function() {
  return Episodes.find({});
});

我将已发布记录集的名称更改为 episodesList

Meteor.publish("episodesList", function() {
  return Episodes.find({});
});

我还要解决这个问题的方法是创建一个名为 client / main.js 的文件,并订阅我已经发布的 episodesList

Meteor.startup(function() {
  Meteor.subscribe("episodesList");
});

我无法在 / episodes /:episodeNumber 路线中使用 episodeNumber 参数。我能够 _id 工作,但这很难看,所以我创建了一个 slug 属性,并且运行正常。

以下是 routes.js 中的更新定义:

  this.route('singleEpisode', {
    path: '/episodes/:slug',
    waitOn: function() {
      return Meteor.subscribe('episodesList');
    },
    data: function() {
      return Episodes.findOne({slug: this.params.slug});
    }
  });

答案 1 :(得分:0)

尝试返回游标而不是数组,例如:

Meteor.publish("episode", function(episodeNumber) {
  check(episodeNumber, String);
  return Episodes.find({episodeNumber: episodeNumber});
});

答案 2 :(得分:0)

您无法在yur发布功能中发送非游标。

你可能应该在server控制台说

时出错

publish function not-returning array of non-cursor或类似的东西

尝试发布游标

Meteor.publish("episode", function(episodeNumber) {
  check(episodeNumber, String);
  //check whether the episodes are existed or not
  console.log(Episodes.find({episodeNumber: episodeNumber}).count());
  return Episodes.find({episodeNumber: episodeNumber});
});

并检查服务器控制台(终端)是否存在错误