sql >> Base de Datos >  >> NoSQL >> MongoDB

Meteor - ¿Por qué debo usar this.userId sobre Meteor.userId() siempre que sea posible?

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.

  1. En el servidor, dentro de una función de publicación, llamando a Meteor.userId() o Meteor.user() provocará un error . En su lugar, utilice this.userId o Meteor.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 por Meteor.users.find(this.userId) y tomar las medidas apropiadas cuando cambie el registro.
  2. En el servidor, mientras se procesa una llamada de método, Meteor.userId() y Meteor.user() corresponderá al ID del usuario llamante y su registro, respectivamente. Sin embargo, tenga en cuenta que las llamadas a Meteor.user() dará como resultado una consulta de base de datos porque son esencialmente equivalente a Meteor.users.findOne(Meteor.userId()) .

    Directamente dentro de una llamada de método, también puede usar this.userId en lugar de Meteor.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() que this.userId porque no puedes usar this.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 usar this.userId en el cliente.

  3. En el cliente, Meteor.userId() y Meteor.user() no arrojará errores y this.userId no trabajará. Llamadas a Meteor.user() son esencialmente equivalentes a Meteor.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 por Meteor.user() puede estar incompleto (especialmente si la autopublish el paquete no está instalado).