判断从这条评论作者:David Glasser 在 GitHub 问题中:
this.userId
是主要 API 并且Meteor.userId()
是 JavaScript 新手的语法糖,他们可能还不了解成功使用它的细节
看来我们应该使用this.userId
只要有可能(例如在方法函数内部,您可以同时使用两者),并且仅使用Meteor.userId()
内部发布功能。如果这个假设是正确的,why?
(参考代码的相关位也会有帮助,我似乎找不到它)
你的问题似乎混淆了Meteor.userId()
and Meteor.user()
。问题的正文似乎在问前者,而主题行则在问后者。我会尝试解决这两个问题。
- 在服务器上的发布函数中,调用
Meteor.userId()
or Meteor.user()
will 导致错误。相反,使用this.userId
or Meteor.users.findOne(this.userId)
, 分别。但请注意,仅当客户端订阅时才会调用发布函数。如果您希望发布在用户记录更改时也更改,则需要observe()
返回的光标Meteor.users.find(this.userId)
并在记录发生变化时采取适当的措施。
-
在服务器上,当正在处理方法调用时,Meteor.userId()
and Meteor.user()
将分别对应主叫用户的 ID 及其记录。但是,请注意,调用Meteor.user()
将导致数据库查询,因为它们是本质上相当于Meteor.users.findOne(Meteor.userId()).
直接在方法调用中,您还可以使用this.userId
代替Meteor.userId()
,但您不太可能看到显着的性能差异。当服务器收到方法调用时,使用用户 ID(以及其他一些信息)运行您的方法实现存储在特定的slot在纤维上。Meteor.userId()
只是从当前光纤上的插槽中检索 ID。那应该很快。
通常重构使用以下代码的代码会更容易Meteor.userId()
than this.userId
因为你不能使用this.userId
方法体之外(例如this
从方法体调用的函数中不会有“userId”属性)并且您不能使用this.userId
在客户端上。
- 在客户端上,
Meteor.userId()
and Meteor.user()
不会抛出错误并且this.userId
不管用。致电Meteor.user()
are 本质上相当于Meteor.users.findOne(Meteor.userId()),但由于这对应于迷你 mongo DB 查询,因此性能可能不会成为问题。但是,出于安全原因,返回的对象Meteor.user()
可能不完整(特别是如果autopublish
软件包未安装)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)