Twoje pytanie wydaje się łączyć Meteor.userId()
i Meteor.user()
. Treść pytania wydaje się pytać o to pierwsze, podczas gdy w temacie pytania o to drugie. Postaram się zająć obiema kwestiami.
- Na serwerze, w ramach funkcji publikowania, wywołując metodę
Meteor.userId()
lubMeteor.user()
czy spowoduje błąd . Zamiast tego użyjthis.userId
lubMeteor.users.findOne(this.userId)
, odpowiednio. Należy jednak pamiętać, że funkcja publikowania jest wywoływana tylko wtedy, gdy klient subskrybuje. Jeśli chcesz, aby publikacja zmieniała się po zmianie rekordu użytkownika, musisz wykonaćobserve()
kursor zwrócony przezMeteor.users.find(this.userId)
i podejmij odpowiednie działania, gdy rekord się zmieni. -
Na serwerze, podczas przetwarzania wywołania metody,
Meteor.userId()
iMeteor.user()
będzie odpowiadać odpowiednio identyfikatorowi dzwoniącego użytkownika i jego zapisowi. Należy jednak pamiętać, że wywołaniaMeteor.user()
spowoduje zapytanie do bazy danych, ponieważ są one zasadniczo odpowiednikMeteor.users.findOne(Meteor.userId())
.Bezpośrednio w wywołaniu metody możesz również użyć
this.userId
zamiastMeteor.userId()
, ale jest mało prawdopodobne, że zobaczysz znaczącą różnicę w wydajności. Gdy serwer otrzyma wywołanie metody, uruchamia implementację metody z identyfikatorem użytkownika (i kilkoma innymi informacjami) przechowywane w konkretnym s na włóknie.Meteor.userId()
po prostu pobiera identyfikator z gniazda na bieżącym włóknie. To powinno być szybkie.Generalnie łatwiej jest zrefaktoryzować kod, który używa
Meteor.userId()
niżthis.userId
ponieważ nie możesz użyćthis.userId
poza treścią metody (np.this
nie będzie miała właściwości „userId” w funkcji, którą wywołujesz z treści metody) i nie możesz użyćthis.userId
na kliencie. - Na kliencie
Meteor.userId()
iMeteor.user()
nie zwróci błędów ithis.userId
nie będzie działać. WywołujeMeteor.user()
są zasadniczo równoważneMeteor.users.findOne(Meteor.userId())
, ale ponieważ odpowiada to zapytaniu mini-mongo DB, wydajność prawdopodobnie nie będzie problemem. Jednak ze względów bezpieczeństwa obiekt zwrócony przezMeteor.user()
może być niekompletna (zwłaszcza jeśliautopublish
pakiet nie jest zainstalowany).