Вашият въпрос изглежда обединява Meteor.userId() и Meteor.user() . Изглежда, че тялото на въпроса пита за първото, докато темата пита за второто. Ще се опитам да разгледам и двете.
- На сървъра, в рамките на функция за публикуване, извикване на
Meteor.userId()илиMeteor.user()ще причини грешка . Вместо това използвайтеthis.userIdилиMeteor.users.findOne(this.userId), съответно. Обърнете внимание обаче, че функцията за публикуване се извиква само когато клиент се абонира. Ако искате публикацията да се промени, когато потребителският запис се промени, ще трябва даobserve()курсорът, върнат отMeteor.users.find(this.userId)и предприема подходящи действия, когато записът се промени. -
На сървъра, докато се обработва извикване на метод,
Meteor.userId()иMeteor.user()ще съответства съответно на ID на викащия потребител и неговия запис. Имайте предвид обаче, че извикванията наMeteor.user()ще доведе до заявка в DB, защото те са по същество е еквивалентен наMeteor.users.findOne(Meteor.userId()).Директно в извикване на метод можете също да използвате
this.userIdвместоMeteor.userId(), но е малко вероятно да видите значителна разлика в производителността. Когато сървърът получи извикването на метода, той изпълнява внедряването на вашия метод с идентификатора на потребителя (и друга информация) съхранявани в конкретен слот върху влакното.Meteor.userId()просто извлича идентификатора от слота на текущото влакно. Това трябва да е бързо.Обикновено е по-лесно да се преработи код, който използва
Meteor.userId()отколкотоthis.userIdзащото не можете да използватеthis.userIdизвън тялото на метода (напр.thisняма да има свойство „userId“ във функция, която извиквате от тялото на метода) и не можете да използватеthis.userIdна клиента. - На клиента,
Meteor.userId()иMeteor.user()няма да генерира грешки иthis.userIdняма да работи. ИзвикваMeteor.user()по същество са еквивалентни наMeteor.users.findOne(Meteor.userId()), но тъй като това съответства на мини-монго DB заявка, производителността вероятно няма да бъде проблем. От съображения за сигурност обаче обектът, върнат отMeteor.user()може да е непълна (особено акоautopublishпакетът не е инсталиран).