Ihre Frage scheint Meteor.userId()
zu verschmelzen und Meteor.user()
. Der Hauptteil der Frage scheint nach ersterem zu fragen, während die Betreffzeile nach letzterem fragt. Ich werde versuchen, beides anzusprechen.
- Auf dem Server innerhalb einer Veröffentlichungsfunktion entweder
Meteor.userId()
aufrufen oderMeteor.user()
wird einen Fehler verursachen . Verwenden Sie stattdessenthis.userId
oderMeteor.users.findOne(this.userId)
, beziehungsweise. Beachten Sie jedoch, dass die Publish-Funktion nur aufgerufen wird, wenn ein Client abonniert. Wenn Sie möchten, dass sich die Veröffentlichung ändert, wenn sich der Benutzerdatensatz ändert, müssen Sieobserve()
verwenden der vonMeteor.users.find(this.userId)
zurückgegebene Cursor und entsprechende Maßnahmen ergreifen, wenn sich der Datensatz ändert. -
Auf dem Server, während ein Methodenaufruf verarbeitet wird,
Meteor.userId()
undMeteor.user()
entspricht der ID des aufrufenden Benutzers bzw. dessen Datensatz. Beachten Sie jedoch, dass Aufrufe vonMeteor.user()
führt zu einer DB-Abfrage, weil sie sind im Wesentlichen äquivalent zuMeteor.users.findOne(Meteor.userId())
.Direkt innerhalb eines Methodenaufrufs können Sie auch
this.userId
verwenden stattMeteor.userId()
, aber es ist unwahrscheinlich, dass Sie einen signifikanten Leistungsunterschied feststellen. Wenn der Server den Methodenaufruf empfängt, wird er führt Ihre Methodenimplementierung mit der Benutzer-ID (und einigen anderen Informationen) aus in einem bestimmten Slot gespeichert auf der Faser.Meteor.userId()
ruft nur die ID aus dem Steckplatz auf der aktuellen Faser ab. Das sollte schnell gehen.Es ist im Allgemeinen einfacher, Code umzugestalten, der
Meteor.userId()
verwendet alsthis.userId
weil Siethis.userId
nicht verwenden können außerhalb des Methodenkörpers (z. B.this
hat keine 'userId'-Eigenschaft innerhalb einer Funktion, die Sie vom Methodenrumpf aufrufen), und Sie könnenthis.userId
nicht verwenden auf dem Client. - Auf dem Client
Meteor.userId()
undMeteor.user()
wird keine Fehler undthis.userId
werfen wird nicht funktionieren. Aufrufe vonMeteor.user()
sind im Wesentlichen äquivalent zuMeteor.users.findOne(Meteor.userId())
, aber da dies einer Mini-Mongo-DB-Abfrage entspricht, ist die Leistung wahrscheinlich kein Problem. Aus Sicherheitsgründen wird jedoch das Objekt vonMeteor.user()
zurückgegeben möglicherweise unvollständig (insbesondere wenn die Dateiautopublish
Paket ist nicht installiert).