Вашият въпрос изглежда обединява 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
пакетът не е инсталиран).