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.userId
ouMeteor.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.userId
au 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.userId
car vous ne pouvez pas utiliserthis.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 utiliserthis.userId
sur le client. - Sur le client,
Meteor.userId()
etMeteor.user()
ne lancera pas d'erreurs etthis.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é parMeteor.user()
peut être incomplet (surtout si le paramètreautopublish
le paquet n'est pas installé).