MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meteor - Pourquoi devrais-je utiliser this.userId plutôt que Meteor.userId() chaque fois que possible ?

Votre question semble confondre Meteor.userId() et Meteor.user() . Le corps de la question semble poser des questions sur le premier tandis que la ligne d'objet pose des questions sur le second. Je vais essayer de répondre aux deux.

  1. Sur le serveur, dans une fonction de publication, en appelant soit Meteor.userId() ou Meteor.user() va provoquer une erreur . Utilisez plutôt this.userId ou Meteor.users.findOne(this.userId) , respectivement. Cependant, notez que la fonction de publication n'est appelée que lorsqu'un client s'abonne. Si vous voulez que la publication change lorsque l'enregistrement de l'utilisateur change, vous devrez observe() le curseur renvoyé par Meteor.users.find(this.userId) et prendre les mesures appropriées lorsque l'enregistrement change.
  2. Sur le serveur, pendant le traitement d'un appel de méthode, Meteor.userId() et Meteor.user() correspondra à l'identifiant de l'utilisateur appelant et à son enregistrement, respectivement. Cependant, sachez que les appels à Meteor.user() entraînera une requête DB car ils sont essentiellement équivalent à Meteor.users.findOne(Meteor.userId()) .

    Directement dans un appel de méthode, vous pouvez également utiliser this.userId au lieu de Meteor.userId() , mais il est peu probable que vous constatiez une différence de performances significative. Lorsque le serveur reçoit l'appel de méthode, il exécute l'implémentation de votre méthode avec l'ID de l'utilisateur (et quelques autres informations) stocké dans un emplacement sur la fibre. Meteor.userId() récupère simplement l'ID de l'emplacement sur la fibre actuelle. Cela devrait être rapide.

    Il est généralement plus facile de refactoriser le code qui utilise Meteor.userId() que this.userId car vous ne pouvez pas utiliser this.userId en dehors du corps de la méthode (par exemple, this n'aura pas de propriété 'userId' dans une fonction que vous appelez depuis le corps de la méthode) et vous ne pouvez pas utiliser this.userId sur le client.

  3. Sur le client, Meteor.userId() et Meteor.user() ne lancera pas d'erreurs et this.userId ne fonctionnera pas. Appels à Meteor.user() sont essentiellement équivalents à Meteor.users.findOne(Meteor.userId()) , mais comme cela correspond à une requête DB mini-mongo, les performances ne seront probablement pas un problème. Cependant, pour des raisons de sécurité l'objet retourné par Meteor.user() peut être incomplet (surtout si le paramètre autopublish le paquet n'est pas installé).