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.
- Sur le serveur, dans une fonction de publication, en appelant soit
Meteor.userId()ouMeteor.user()va provoquer une erreur . Utilisez plutôtthis.userIdouMeteor.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 devrezobserve()le curseur renvoyé parMeteor.users.find(this.userId)et prendre les mesures appropriées lorsque l'enregistrement change. -
Sur le serveur, pendant le traitement d'un appel de méthode,
Meteor.userId()etMeteor.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.userIdau lieu deMeteor.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()quethis.userIdcar vous ne pouvez pas utiliserthis.userIden dehors du corps de la méthode (par exemple,thisn'aura pas de propriété 'userId' dans une fonction que vous appelez depuis le corps de la méthode) et vous ne pouvez pas utiliserthis.userIdsur le client. - Sur le client,
Meteor.userId()etMeteor.user()ne lancera pas d'erreurs etthis.userIdne 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é parMeteor.user()peut être incomplet (surtout si le paramètreautopublishle paquet n'est pas installé).