MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Meteor - Warum sollte ich nach Möglichkeit this.userId anstelle von Meteor.userId() verwenden?

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.

  1. Auf dem Server innerhalb einer Veröffentlichungsfunktion entweder Meteor.userId() aufrufen oder Meteor.user() wird einen Fehler verursachen . Verwenden Sie stattdessen this.userId oder Meteor.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 Sie observe() verwenden der von Meteor.users.find(this.userId) zurückgegebene Cursor und entsprechende Maßnahmen ergreifen, wenn sich der Datensatz ändert.
  2. Auf dem Server, während ein Methodenaufruf verarbeitet wird, Meteor.userId() und Meteor.user() entspricht der ID des aufrufenden Benutzers bzw. dessen Datensatz. Beachten Sie jedoch, dass Aufrufe von Meteor.user() führt zu einer DB-Abfrage, weil sie sind im Wesentlichen äquivalent zu Meteor.users.findOne(Meteor.userId()) .

    Direkt innerhalb eines Methodenaufrufs können Sie auch this.userId verwenden statt Meteor.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 als this.userId weil Sie this.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önnen this.userId nicht verwenden auf dem Client.

  3. Auf dem Client Meteor.userId() und Meteor.user() wird keine Fehler und this.userId werfen wird nicht funktionieren. Aufrufe von Meteor.user() sind im Wesentlichen äquivalent zu Meteor.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 von Meteor.user() zurückgegeben möglicherweise unvollständig (insbesondere wenn die Datei autopublish Paket ist nicht installiert).