我試圖從用戶集合發佈「朋友」。每個賬戶都有一個保存所有朋友ID(稱爲地址簿)的字段。但是發佈不起作用我只能獲取我自己的帳戶(如非管理員),例如如果我在控制檯上調用Meteor.users.find()。fetch()。如果我這樣做,控制檯上方的方法會記錄以下內容:流星:從自己的帳戶從外地發佈用戶
I20140107-17:22:38.492(1)? --------------------------------------- [object Object]
I20140107-17: 22:38.497(1)? [{_id:'X6XXyD64AW4CvXG6m',
I20140107-17:22:38.498(1)? createdAt:Tue Jan 07 2014 17:10:43> GMT + 0100(CET)
I20140107-17:22:38.498(1)?電子郵件:[[Object]],
I20140107-17:22:38.498(1)?服務:{password:[Object],resume: [Object]},
I20140107-17:22:38.499(1)?用戶名:服務器:
Meteor.publish("users", function(){ if (Roles.userIsInRole(this.userId, ["admin"])) return Meteor.users.find(); else return Meteor.users.find({_id : this.userId}, {fields: {username: 1, id_:1, emails:1, addressbook:1, createdAt:1}}); }); Meteor.publish("friends", function(){ var addressbook = Meteor.users.find({_id: this.userId}, {limit:1} , {fields: {addressbook:1}}); console.log("---------------------------------------" + addressbook); console.log(addressbook.fetch()); //return Meteor.users.find({_id :{ $in : addressbook}}, {fields : {username:1, emails: 1}});
客戶:
'測試'}]Deps.autorun(function() { Meteor.subscribe("friends"); Meteor.subscribe("users"); });
所以沒有通訊錄呈現
這裏我的代碼片段
我如何發佈用戶這些存儲在他們的ID到字段地址簿(或至少他們的電子郵件和用戶名)?有沒有更好的方法來結合發佈?
在此先感謝!
感謝您的建議。我已經嘗試過這種方式,但它會在服務器端引發異常(複製您的代碼),請參閱完整日誌:http://pastebin.com/0EB4bMZF 我使用了console.log(addressbook);並且它顯示地址簿始終未定義:/ – kerosene
如果未定義「地址簿」,則會出現錯誤。我修改了代碼來處理這種情況。如果提取沒有返回帶有「地址簿」的文檔,則用戶未登錄或用戶文檔沒有「地址簿」。檢查'this.userId'是否有效,並用'meteor mongo'在控制檯上打開數據庫連接。當db連接打開時,運行'db.users.findOne(userId)',其中userId是你從上面獲得的。看看文件是否有「地址簿」。如果沒有,那麼它就沒有被設置,這在這個問題的範圍之外。 –
謝謝!現在一切順利!地址簿中有一箇舊的id-entry(不再存在),這是造成異常的原因。 – kerosene