从David Glasser 在 GitHub 问题中的评论来看:
this.userId
是主要的 API,Meteor.userId()
对于刚接触 JavaScript 的用户来说是语法糖,他们可能还不了解成功使用它的细节
似乎我们应该this.userId
尽可能使用(例如在方法函数内部,您可以同时使用两者),并且只使用Meteor.userId()
内部发布函数。如果这个假设是正确的,为什么?
(参考代码的相关位也会有所帮助,我似乎找不到它)
从David Glasser 在 GitHub 问题中的评论来看:
this.userId
是主要的 API,Meteor.userId()
对于刚接触 JavaScript 的用户来说是语法糖,他们可能还不了解成功使用它的细节
似乎我们应该this.userId
尽可能使用(例如在方法函数内部,您可以同时使用两者),并且只使用Meteor.userId()
内部发布函数。如果这个假设是正确的,为什么?
(参考代码的相关位也会有所帮助,我似乎找不到它)
Meteor.userId()
你的问题似乎混为一谈Meteor.user()
。问题的主体似乎在询问前者,而主题行则在询问后者。我会尝试解决这两个问题。
Meteor.userId()
或Meteor.user()
将导致错误。相反,请分别使用this.userId
or Meteor.users.findOne(this.userId)
。但是,请注意,仅在客户端订阅时才调用发布函数。如果您希望在用户记录更改时发布更改,则需要在记录更改时observe()
返回光标Meteor.users.find(this.userId)
并采取适当的操作。在服务器上,在处理方法调用时,Meteor.userId()
将Meteor.user()
分别对应调用用户的 ID 和他们的记录。但是,请注意,调用Meteor.user()
将导致数据库查询,因为它们本质上等同于Meteor.users.findOne(Meteor.userId())
.
直接在方法调用中,您也可以使用this.userId
代替Meteor.userId()
,但您不太可能看到显着的性能差异。当服务器接收到方法调用时,它会使用存储在光纤上特定插槽中的用户 ID(和其他一些信息)来运行您的方法实现。只需从当前光纤上的插槽中检索 ID。那应该很快。Meteor.userId()
重构使用的代码通常Meteor.userId()
比this.userId
因为您不能this.userId
在方法主体之外使用(例如this
,您从方法主体调用的函数中没有“userId”属性)并且您不能this.userId
在客户端上使用更容易.
Meteor.userId()
不会Meteor.user()
抛出错误,this.userId
也不会工作。调用本质Meteor.user()
上等同于Meteor.users.findOne(Meteor.userId())
,但由于这对应于 mini-mongo DB 查询,因此性能可能不会成为问题。但是,出于安全原因,返回的对象Meteor.user()
可能不完整(尤其是在autopublish
未安装软件包的情况下)。简单来说,Meteor.userId() 每次使用时都会查询数据库。在客户端(逻辑上),它看起来不错 - 因为我们有 minimongo。
在服务器端,使用 Meteor.userId() 会消耗 SERVER 上的额外资源,这有时是不希望的。
现在,this.userId 更像是一个会话变量,即只有当当前会话附加了一个用户 ID 时,它才会有一个值。因此,使用“this”引用不会每次都去获取数据库,而是使用活动会话 userId。
将性能视为一个因素。这是使用 this.userId 而不是 Meteor.userId 的主要原因