В одной из моих Meteor.publish() функций this.userId имеет значение undefined. Я не могу назвать Meteor.userId(), потому что недоступен внутри функции публикации. Как вы должны получить userId сейчас?
This.userId возвращает undefined внутри Meteor.publish
Ответ 1
Существует четыре возможности:
-
Пользователь не зарегистрирован.
-
Вы вызываете метод с сервера, и, таким образом, не будет пользователя, связанного с вызовом (если вы не вызываете его из другой функции, которая будет привязана пользователем к своей среде, например, другой метод или функция подписки).
-
У вас даже не установлен пакет учетных записей (или любой из надстроек). Я только включаю это для полноты.
-
В ES6 используется функция стрелок.
Meteor.publish('invoices', function() { return invoices.find({by: this.userId}); });будет работать нормально, аMeteor.publish('invoices', () => { return invoices.find({by: this.userId}); });вернет пустой курсор, потому чтоthisне будет иметь свойстваuserId. Это происходит потому, что функция стрелки не связывает собственныеthis,arguments,superилиnew.target.
Если это определенно не (2), что происходит, когда вы регистрируете Meteor.userId() непосредственно перед тем, как сделать вызов метода на клиенте?
Ответ 2
FIXED:
import { Meteor } from 'meteor/meteor';
import { Roles } from 'meteor/alanning:roles';
import _ from 'lodash';
import { check } from 'meteor/check';
import Corporations from '../corporations';
Meteor.publish('corporations.list', () => {
const self = this.Meteor; // <-- see here
const userId = self.userId();
const user = self.user();
let filters = {};
if (user) {
if (!Roles.userIsInRole(userId, ['SuperAdminHolos'])) { // No Está en el Rol SuperAdminHolos
filters = { adminsEmails: { $in: _.map(user.emails, 'address') } };
}
return Corporations.find(filters);
} else return;
});
Ответ 3
Вместо этого вы должны использовать Meteor.userId().