Uw vraag lijkt Meteor.userId()
. samen te voegen en Meteor.user()
. De kern van de vraag lijkt over het eerste te vragen, terwijl de onderwerpregel over het laatste vraagt. Ik zal proberen beide aan te pakken.
- Op de server, binnen een publicatiefunctie, die
Meteor.userId()
aanroept ofMeteor.user()
zal een fout veroorzaken . Gebruik in plaats daarvanthis.userId
ofMeteor.users.findOne(this.userId)
, respectievelijk. Houd er echter rekening mee dat de publicatiefunctie alleen wordt aangeroepen wanneer een klant zich abonneert. Als u wilt dat de publicatie verandert wanneer het gebruikersrecord verandert, moet uobserve()
de cursor geretourneerd doorMeteor.users.find(this.userId)
en passende actie ondernemen wanneer het record verandert. -
Op de server, terwijl een methodeaanroep wordt verwerkt,
Meteor.userId()
enMeteor.user()
komt overeen met respectievelijk de ID van de bellende gebruiker en diens record. Houd er echter rekening mee dat oproepen naarMeteor.user()
zal resulteren in een DB-query omdat ze zijn in wezen gelijk aanMeteor.users.findOne(Meteor.userId())
.Direct binnen een methodeaanroep kunt u ook
this.userId
. gebruiken in plaats vanMeteor.userId()
, maar het is onwaarschijnlijk dat u een significant prestatieverschil zult zien. Wanneer de server de methodeaanroep ontvangt, wordt deze voert uw methode-implementatie uit met de gebruikers-ID (en wat andere informatie) opgeslagen in een bepaalde Meteor.userId() haalt gewoon de ID uit de sleuf op de huidige vezel. Dat moet snel zijn.Het is over het algemeen gemakkelijker om code te refactoren die gebruikmaakt van
Meteor.userId()
danthis.userId
omdat uthis.userId
. niet kunt gebruiken buiten de hoofdtekst van de methode (bijv.this
heeft geen eigenschap 'userId' binnen een functie die u aanroept vanuit de body van de methode) en u kuntthis.userId
niet gebruiken op de klant. - Op de client,
Meteor.userId()
enMeteor.user()
zal geen fouten genereren enthis.userId
zal niet werken. Oproepen naarMeteor.user()
zijn in wezen gelijk aanMeteor.users.findOne(Meteor.userId())
, maar aangezien dit overeenkomt met een mini-mongo DB-query, zullen de prestaties waarschijnlijk geen probleem zijn. Om veiligheidsredenen is het object echter geretourneerd doorMeteor.user()
kan onvolledig zijn (vooral als deautopublish
pakket is niet geïnstalleerd).