Su pregunta parece combinar Meteor.userId()
y Meteor.user()
. El cuerpo de la pregunta parece preguntar sobre lo primero, mientras que la línea de asunto pregunta sobre lo segundo. Intentaré abordar ambos.
- En el servidor, dentro de una función de publicación, llamando a
Meteor.userId()
oMeteor.user()
provocará un error . En su lugar, utilicethis.userId
oMeteor.users.findOne(this.userId)
, respectivamente. Sin embargo, tenga en cuenta que la función de publicación solo se llama cuando un cliente se suscribe. Si desea que la publicación cambie cuando cambie el registro de usuario, deberáobserve()
el cursor devuelto porMeteor.users.find(this.userId)
y tomar las medidas apropiadas cuando cambie el registro. -
En el servidor, mientras se procesa una llamada de método,
Meteor.userId()
yMeteor.user()
corresponderá al ID del usuario llamante y su registro, respectivamente. Sin embargo, tenga en cuenta que las llamadas aMeteor.user()
dará como resultado una consulta de base de datos porque son esencialmente equivalente aMeteor.users.findOne(Meteor.userId())
.Directamente dentro de una llamada de método, también puede usar
this.userId
en lugar deMeteor.userId()
, pero es poco probable que vea una diferencia de rendimiento significativa. Cuando el servidor recibe la llamada al método, ejecuta la implementación de su método con la identificación del usuario (y alguna otra información) almacenado en una ranura sobre la fibra.Meteor.userId()
simplemente recupera la identificación de la ranura en la fibra actual. Eso debería ser rápido.Por lo general, es más fácil refactorizar el código que usa
Meteor.userId()
quethis.userId
porque no puedes usarthis.userId
fuera del cuerpo del método (por ejemplo,this
no tendrá una propiedad 'userId' dentro de una función a la que llama desde el cuerpo del método) y no puede usarthis.userId
en el cliente. - En el cliente,
Meteor.userId()
yMeteor.user()
no arrojará errores ythis.userId
no trabajará. Llamadas aMeteor.user()
son esencialmente equivalentes aMeteor.users.findOne(Meteor.userId())
, pero dado que esto corresponde a una consulta de base de datos mini-mongo, el rendimiento probablemente no sea una preocupación. Sin embargo, por razones de seguridad, el objeto devuelto porMeteor.user()
puede estar incompleto (especialmente si laautopublish
el paquete no está instalado).