2016-09-08 5 views
-1

Я добавляю пользовательские данные в учетные записи пользователей Meteor в первый раз. Я смог без труда добавить пользовательские поля, и я знаю, что они там, потому что я могу видеть их в Монголе. Я публикую через глобальную подписку, и как я могу перейти к чтению данных из отдельных полей? Кажется, синтаксис сильно отличается от синтаксиса при использовании методов публикации/подписки.Пользовательские поля и глобальные подписи для учетных записей пользователей Meteor

Итак, у меня есть учетные записи пользователей, как это (как показано на монгольском):

"_id": "#################", 
    "profile": { 
    "name": "Test User" 
    }, 
    "customfields": { 
    "customfield1": [ 
     "A","B","C" 
    ] 
    } 
} 

В server/main.js У меня есть следующие

Meteor.publish(null, function() { 
    return Meteor.users.find(this.userId, {fields:{customfields:1}}); 
}); 

Это, кажется, публикации штраф. Но какой код я использую для визуализации курсора в качестве данных? Я использую вариации кода, как это в client/main.js и не имея успеха:

var stuff = Meteor.users.find(this.userId).fetch(); 
console.log(stuff.customfield1); 

Любая помощь приветствуется.

+0

Typo: вы фильтруете на '{fields: {customfield: 1}}' вместо '{fields: {customfields: 1}}' –

+0

К сожалению, в примере есть опечатка - но этого нет в мой фактический рабочий код, так грустно, что это не преступник. –

ответ

0

MyCollection.find() она возвращает курсор, тогда как MyCollection.findOne(), возвращает объект , т.е. одного MongoDB документа.

Публикациядолжна возвращатькурсора или массив курсоров. Публикация прекрасна.

Вы в основном пытаетесь сделать ключ пользователя customfields видимым на клиенте. (profile ключ автоматически публикуется Метеор).

На клиенте, где вы делаете:

var stuff = Meteor.users.find(this.userId).fetch(); 

Вы можете просто использовать:

var stuff = Meteor.user(); 

или

var stuff = Meteor.users.findOne(Meteor.userId()); 

Тогда stuff.customfields будет содержать то, что вы ищете ,

Вторая форма слишком сложная для меня, если вы не ищете другого пользователя, кроме зарегистрированного пользователя.

Примечание: this.userId на клиенте не быть userId текущего пользователя, то он будет неопределенными. Это работает только на сервере. Это может быть основной причиной вашей проблемы. Кроме того, ваши публикации должны быть ready() для данных, которые будут доступны. Это неверно сразу после входа в систему, например.

+0

Ах, отлично. Кажется, я написал рабочий код ранее в этом процессе, но я не знал о проблеме _ready() _. Я обращусь к этому. Большое спасибо! –

0

Так как customfield1 вложен в пользовательские поля, вы пробовали stuff.customfields.customfield1?

+0

Да, и на самом деле я могу заставить консоль регистрировать массив (а не undefined или ошибку), но он пуст. –