Meteor.userId против Meteor.userId()

#meteor #userid

#meteor #идентификатор пользователя

Вопрос:

У меня есть короткий фрагмент кода, например, для обновления имени в профиле моего пользователя:

Meteor.users.update({_id: Meteor.userId()}, {$set:{"profile.name": name}});

Когда я работаю локально, я могу использовать Meteor.userId или Meteor.userId() без проблем. Однако при развертывании в Modulus я сталкиваюсь с проблемами. Если у меня нет оператора на нем, он будет выполнять начальный $set , но не более. Если я использую операторы, он ведет себя так, как я и ожидал.

Почему это? Я предполагаю, что я не должен был использовать это без оператора для начала, но есть ли причина, по которой это вообще сработало?

Комментарии:

1. Meteor.userId() и Meteor.userId не могут быть одинаковыми. Meteor.userId возвращает функцию Meteor.userId() возвращает строку. я думаю, вы говорите об this.userId, который доступен только внутри публикаций и Meteor.methods.

2. Нет, как ни странно, я использовал Meteor.userId на стороне сервера, а не в публикации.

3. Вероятно, вы устанавливаете _id в строковое представление Meteor.userId функции. Что-то вроде "function() { ... }" . Который успешно установит значение, но это не то, что вы хотите. Можете ли вы открыть консоль mongo и просмотреть несколько документов, чтобы увидеть, как выглядят поля _id? meteor mongo из CL

4.@пахан, просто для ясности, вы пишете, что Meteor.userId возвращает неправильную функцию. Функции возвращают значения (возможно), в то время как Meteor.userId сохраняет (является) функцией.

Ответ №1:

Посмотрите в документации

  • Функция Meteor.userId() доступна «Где угодно, кроме функций публикации»

  • Переменная this.userId доступна «Где угодно» (которая явно также вызывается для функции публикации на стороне сервера).

Ответ №2:

У меня была такая же проблема с Meteor.userId() при попытке заставить модульное тестирование с mocha работать.

Простое исправление — перейти к tasks.js и заменить Meteor.userId() на this.userId что — использовать this контекст функции.