2014-03-01 26 views
2
Meteor.publish('polls', function() { 
    return Polls.find({}); 
}); 

Meteor.publish('recentPolls', function() { 
    return Polls.find({}, {sort: {date: -1}, limit: 10}).fetch(); 
}); 

所以這是我/server/server.js文件從文檔,它說在一個數組匹配文件fetch()方法返回。然而,使用在客戶端訂閱功能,像這樣流星MongoDB的查找/讀取的問題

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 

回答

3

fetch返回一個對象數組,它不是從發佈函數返回的合法值。

發佈函數只能返回一個遊標,一個遊標數組或一個falsy值。要改正錯誤,只是刪除fetch

return Polls.find({}, {sort: {date: -1}, limit: 10}); 

在客戶端,您想你的模板內部認購。您想要訂閱一次(通常在一個名爲client/subscriptions.js的文件中)或您的路由中(請參閱鐵路路由器documentation)。

忽略任何subscribe返回。調用subscribe只允許服務器將數據同步到客戶端。調用的結果不是數據本身。

從模板訪問您的數據,只需要使用另一個發現像:

Template.recentPolls.polls = function() { 
    Polls.find({}, {sort: {date: -1}}); 
} 
+0

這只是返回光標是否正確?我將如何去訪問客戶端中的數據? – user1952811

+0

這是我在控制檯中得到的錯誤: 錯誤:{{#each}}只接受數組,遊標或falsey值。你傳遞了:[object Object]' – user1952811

+0

問題是它仍然返回相同的對象。 ';'返回相同的對象'對象{停止:函數,就緒:函數}' – user1952811