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.userId
ouMeteor.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.userId
em 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.userId
porque você não pode usarthis.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 usarthis.userId
no cliente.
- No cliente,
Meteor.userId()
eMeteor.user()
não lançará erros ethis.userId
nã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 oautopublish
pacote não está instalado).