Meteor - 为什么我应该尽可能使用 this.userId 而不是 Meteor.userId() ?

2023-12-12

判断从这条评论作者:David Glasser 在 GitHub 问题中:

this.userId是主要 API 并且Meteor.userId()是 JavaScript 新手的语法糖,他们可能还不了解成功使用它的细节

看来我们应该使用this.userId只要有可能(例如在方法函数内部,您可以同时使用两者),并且仅使用Meteor.userId()内部发布功能。如果这个假设是正确的,why?

(参考代码的相关位也会有帮助,我似乎找不到它)


你的问题似乎混淆了Meteor.userId() and Meteor.user()。问题的正文似乎在问前者,而主题行则在问后者。我会尝试解决这两个问题。

  1. 在服务器上的发布函数中,调用Meteor.userId() or Meteor.user() will 导致错误。相反,使用this.userId or Meteor.users.findOne(this.userId), 分别。但请注意,仅当客户端订阅时才会调用发布函数。如果您希望发布在用户记录更改时也更改,则需要observe()返回的光标Meteor.users.find(this.userId)并在记录发生变化时采取适当的措施。
  2. 在服务器上,当正在处理方法调用时,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在客户端上。

  3. 在客户端上,Meteor.userId() and Meteor.user()不会抛出错误并且this.userId不管用。致电Meteor.user() are 本质上相当于Meteor.users.findOne(Meteor.userId()),但由于这对应于迷你 mongo DB 查询,因此性能可能不会成为问题。但是,出于安全原因,返回的对象Meteor.user()可能不完整(特别是如果autopublish软件包未安装)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Meteor - 为什么我应该尽可能使用 this.userId 而不是 Meteor.userId() ? 的相关文章

随机推荐