Meteor.publish('polls', function () {
return Polls.find({});
});
Meteor.publish('recentPolls', function() {
return Polls.find({}, {sort: {date: -1}, limit: 10}).fetch();
});
所以这是在文档的/server/server.js
文件中,它说fetch()
方法返回数组中的匹配文档。但是,在客户端使用订阅功能就像这样
Template.recentPolls.polls = function() {
console.log(Meteor.subscribe('recentPolls'));
return Meteor.subscribe('recentPolls');
}
由于某些奇怪的原因,这将返回以下对象(不是数组)而是一个对象
Object {stop: function, ready: function}
这是我在控制台中遇到的错误。
Exception from sub 5NozeQwianv2DL2eo Error: Publish function returned an array of non-Cursors
答案 0 :(得分:3)
fetch
返回一个对象数组,这不是从发布函数返回的合法值。
发布函数只能返回游标,游标数组或虚假值。要解决您的错误,只需删除fetch
:
return Polls.find({}, {sort: {date: -1}, limit: 10});
在客户端,不想要在模板中订阅。您希望订阅一次(通常在名为client/subscriptions.js
的文件中)或路由内部(请参阅iron-router documentation)。
忽略subscribe
返回的内容。调用subscribe
只允许服务器将数据同步到客户端。调用的结果不是数据本身。
要从模板访问您的数据,只需使用另一个查找内容:
Template.recentPolls.polls = function() {
Polls.find({}, {sort: {date: -1}});
}