MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Meteor - Por que devo usar this.userId sobre Meteor.userId() sempre que possível?


Sua pergunta parece confundir Meteor.userId() e Meteor.user() . O corpo da pergunta parece estar perguntando sobre o primeiro, enquanto a linha de assunto está perguntando sobre o último. Vou tentar abordar ambos.
  1. No servidor, dentro de uma função de publicação, chamando Meteor.userId() ou Meteor.user() causará um erro . Em vez disso, use this.userId ou Meteor.users.findOne(this.userId) , respectivamente. No entanto, observe que a função de publicação é chamada apenas quando um cliente se inscreve. Se você quiser que a publicação mude quando o registro do usuário for alterado, você precisará observe() o cursor retornado por Meteor.users.find(this.userId) e tome as medidas apropriadas quando o registro for alterado.

  2. No servidor, enquanto uma chamada de método está sendo processada, Meteor.userId() e Meteor.user() corresponderá ao ID do usuário chamador e seu registro, respectivamente. No entanto, esteja ciente de que as chamadas para Meteor.user() resultará em uma consulta de banco de dados porque eles são essencialmente equivalente a Meteor.users.findOne(Meteor.userId()) .

    Diretamente dentro de uma chamada de método, você também pode usar this.userId em vez de Meteor.userId() , mas é improvável que você veja uma diferença significativa de desempenho. Quando o servidor recebe a chamada do método, ele executa sua implementação de método com o ID do usuário (e algumas outras informações) armazenado em um slot na fibra. Meteor.userId() apenas recupera o ID do slot na fibra atual. Isso deve ser rápido.

    Geralmente é mais fácil refatorar código que usa Meteor.userId() do que this.userId porque você não pode usar this.userId fora do corpo do método (por exemplo, this não terá uma propriedade 'userId' dentro de uma função que você chama do corpo do método) e você não pode usar this.userId no cliente.
  3. No cliente, Meteor.userId() e Meteor.user() não lançará erros e this.userId não funciona. Chamadas para Meteor.user() são essencialmente equivalentes a Meteor.users.findOne(Meteor.userId()) , mas como isso corresponde a uma consulta de banco de dados mini-mongo, o desempenho provavelmente não será uma preocupação. No entanto, por motivos de segurança, o objeto retornado por Meteor.user() pode estar incompleto (especialmente se o autopublish pacote não está instalado).