如何为不同的集合重现Meteor.user()客户端 - 服务器效果?

时间:2015-06-24 03:30:31

标签: meteor collections user-accounts

Meteor.user()方法在Client& "当前用户"的服务器我很想为不同的自定义集合重现这种功能。例如,我的应用使用了"云"集合作为一组用户所在的空间。显然有各种云实例,我并不总是希望将cloudId传递给每一个流星方法。理想情况下,我可以使用Meteor.cloud()函数,它可以在客户端和服务器上提供当前的云。

我对接近这个问题的看法:

  1. 到目前为止,我一直在做的是通过在用户配置文件中存储currentCloudId属性并在路由beforeAction上设置它来捎带Meteor.user()。但是,这限制了用户一次只能处于1个云中。

  2. 以某种方式使用Meteor.connection ID将connectionIds映射到cloudIds。这在理论上很有用......但是,似乎Meteor连接ID不能在很大程度上依赖于它们,因为它们可能在重新连接或其他随机场景中发生变化。此外,您还必须" manange"那个" cloudConnections"的集合并删除旧陈旧的等等。

  3. 我正在使用Iron Router ....如果可以在服务器上获取当前的路由数据,这也可以解决我的问题,但我不知道如何在服务器上访问它?

  4. ---基本上我会喜欢一种简单的直接方式来模仿其他集合的Meteor.user()行为。

    感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

你可以在 / lib 中创建一个如下所示的函数:

getUserClouds = function getUserClouds () {
  return Clouds.find({ $elemMatch: { $eq: Meteor.userId() } })
}

这将在客户端和服务器上都有效。但它始终会返回指向0个文档的Cursor。因此,您需要一份出版物:

Meteor.publish('userClouds', function () {
  return Clouds.find({ $elemMatch: { $eq: this.userId } })
})