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. - No servidor, dentro de uma função de publicação, chamando
Meteor.userId()ouMeteor.user()causará um erro . Em vez disso, usethis.userIdouMeteor.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 porMeteor.users.find(this.userId)e tome as medidas apropriadas quando o registro for alterado. -
No servidor, enquanto uma chamada de método está sendo processada,Meteor.userId()eMeteor.user()corresponderá ao ID do usuário chamador e seu registro, respectivamente. No entanto, esteja ciente de que as chamadas paraMeteor.user()resultará em uma consulta de banco de dados porque eles são essencialmente equivalente aMeteor.users.findOne(Meteor.userId()).
Diretamente dentro de uma chamada de método, você também pode usarthis.userIdem vez deMeteor.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 usaMeteor.userId()do quethis.userIdporque você não pode usarthis.userIdfora do corpo do método (por exemplo,thisnão terá uma propriedade 'userId' dentro de uma função que você chama do corpo do método) e você não pode usarthis.userIdno cliente.
- No cliente,
Meteor.userId()eMeteor.user()não lançará erros ethis.userIdnão funciona. Chamadas paraMeteor.user()são essencialmente equivalentes aMeteor.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 porMeteor.user()pode estar incompleto (especialmente se oautopublishpacote não está instalado).