day*_*oli 4 javascript mongodb meteor ddp meteor-accounts
从David Glasser在GitHub问题上的评论来看:
this.userId是主要的API,Meteor.userId()对于刚接触JavaScript的用户来说是语法糖,他们可能还不了解成功使用它的细节
似乎我们应该this.userId尽可能使用(例如在方法函数中,你可以使用它们),并且只使用Meteor.userId()内部发布函数.如果这个假设是正确的,为什么?
(参考代码的相关位也会有所帮助,我似乎无法找到它)
Dea*_*tle 13
你的问题似乎混为一谈Meteor.userId()和Meteor.user().问题的主体似乎在询问前者,而主题是询问后者.我会尽力解决这两个问题.
Meteor.userId()或Meteor.user()将导致错误.相反,分别使用this.userId或Meteor.users.findOne(this.userId).但请注意,只有在客户端订阅时才会调用publish函数.如果希望在用户记录更改时更改发布,则需要observe()返回光标Meteor.users.find(this.userId)并在记录更改时采取适当的操作.在服务器上,在处理方法调用时, Meteor.userId()并分别Meteor.user()对应于调用用户的ID及其记录.但是,请注意,调用Meteor.user()将导致数据库查询,因为它们基本上相当于Meteor.users.findOne(Meteor.userId()).
直接在方法调用中,您也可以使用this.userId而不是Meteor.userId(),但您不太可能看到显着的性能差异.当服务器收到方法调用时,它使用存储在光纤上特定插槽中的用户ID(以及其他一些信息)运行方法实现.Meteor.userId()只需从当前光纤的插槽中检索ID.那应该很快.
它通常更容易重构使用代码Meteor.userId()比this.userId,因为你不能使用this.userId方法体的外部(例如this不会有你的方法体调用一个函数内的"用户id"属性),你不能使用this.userId在客户端上.
Meteor.userId()而Meteor.user()不会抛出错误,this.userId将无法正常工作.来电Meteor.user()是基本等价于Meteor.users.findOne(Meteor.userId()),但因为这相当于一个小型蒙戈DB查询,性能可能不会是一个问题.但是,出于安全原因,返回的对象Meteor.user()可能不完整(特别是如果autopublish未安装包).