La tua domanda sembra confondere Meteor.userId()
e Meteor.user()
. Il corpo della domanda sembra chiedere del primo mentre la riga dell'oggetto chiede del secondo. Proverò ad affrontare entrambi.
- Sul server, all'interno di una funzione di pubblicazione, chiamando
Meteor.userId()
oMeteor.user()
causa un errore . Invece, usathis.userId
oMeteor.users.findOne(this.userId)
, rispettivamente. Tuttavia, si noti che la funzione di pubblicazione viene chiamata solo quando un client si iscrive. Se desideri che la pubblicazione cambi quando il record utente cambia, dovraiobserve()
il cursore restituito daMeteor.users.find(this.userId)
e intraprendere le azioni appropriate quando il record cambia. -
Sul server, durante l'elaborazione di una chiamata al metodo,
Meteor.userId()
eMeteor.user()
corrisponderanno rispettivamente all'ID dell'utente chiamante e al suo record. Tuttavia, tieni presente che chiamaMeteor.user()
risulterà in una query DB perché sono essenzialmente equivalente aMeteor.users.findOne(Meteor.userId())
.Direttamente all'interno di una chiamata al metodo, puoi anche utilizzare
this.userId
invece diMeteor.userId()
, ma è improbabile che noterai una differenza di prestazioni significativa. Quando il server riceve la chiamata al metodo, esegue l'implementazione del metodo con l'ID utente (e alcune altre informazioni) memorizzato in un particolare slot sulla fibra.Meteor.userId()
recupera solo l'ID dallo slot sulla fibra corrente. Dovrebbe essere veloce.In genere è più facile refactoring del codice che utilizza
Meteor.userId()
dithis.userId
perché non puoi utilizzarethis.userId
al di fuori del corpo del metodo (ad es.this
non avrà una proprietà 'userId' all'interno di una funzione che chiami dal corpo del metodo) e non puoi usarethis.userId
sul cliente. - Sul client,
Meteor.userId()
eMeteor.user()
non genererà errori ethis.userId
non funzionerà. Chiamate aMeteor.user()
sono essenzialmente equivalenti aMeteor.users.findOne(Meteor.userId())
, ma poiché corrisponde a una query DB mini-mongo, le prestazioni probabilmente non saranno un problema. Tuttavia, per motivi di sicurezza l'oggetto restituito daMeteor.user()
potrebbe essere incompleto (soprattutto se il fileautopublish
pacchetto non è installato).