如何为不同的集合重现Meteor.user()客户端-服务器效果?
关于Meteor.user()方法在客户机和服务器上对“当前用户”的可用性,我想为不同的自定义集合重现这种功能。例如,我的应用程序使用“云”集合作为一组用户的房间类型。显然,有各种各样的cloud实例,我并不总是希望将cloudId传递到每个meteor方法中。理想情况下,我可以使用Meteor.cloud()函数,该函数将为我提供客户端和服务器上的当前云 我对这个问题的看法是:如何为不同的集合重现Meteor.user()客户端-服务器效果?,meteor,collections,user-accounts,Meteor,Collections,User Accounts,关于Meteor.user()方法在客户机和服务器上对“当前用户”的可用性,我想为不同的自定义集合重现这种功能。例如,我的应用程序使用“云”集合作为一组用户的房间类型。显然,有各种各样的cloud实例,我并不总是希望将cloudId传递到每个meteor方法中。理想情况下,我可以使用Meteor.cloud()函数,该函数将为我提供客户端和服务器上的当前云 我对这个问题的看法是: 到目前为止,我一直在做的是通过在用户配置文件中存储currentCloudId属性,并在操作之前在路由上设置该属性,
感谢您的帮助:)您只需在/lib中创建一个如下所示的函数:
getUserClouds = function getUserClouds () {
return Clouds.find({ $elemMatch: { $eq: Meteor.userId() } })
}
这将在客户端和服务器上都起作用。但它将始终返回指向0个文档的光标。因此,您需要一份出版物:
Meteor.publish('userClouds', function () {
return Clouds.find({ $elemMatch: { $eq: this.userId } })
})
每个云ID链接到什么?用户是否始终具有特定的云ID?你可以在一个用户的文档中存储一个云ID数组,然后在你订阅路由器中的内容时将其作为参考。一个云有很多用户……而一个用户有很多云。在云内部的客户端上,很容易识别cloudId,因为您只订阅了一个云,用于特定的meteor连接。但是在服务器上,只有一个cloudId数组……如果用户位于多个云中,您将不知道哪个cloudId属于哪个连接,因此当从前端调用方法时,您将不知道要在后端更新哪个云。至少您需要为每个用户(可能是其自己的集合)将Meteor ConnectionId映射到CloudId,如#2如果客户端调用Meteor方法,只需将云的ID作为参数传递到Meteor方法。然后服务器就会知道您在谈论哪个ID/云文档。编辑对不起,只是读到这正是你不想做的。我不明白这是如何解决问题的。那么你是说我应该在一个云文档上为特定云中的所有用户创建一个userid数组?从您的设置来看……这看起来只会给我一个光标,显示用户在服务器上拥有的所有云。但是,无法确定这些云中的哪一个是针对特定客户机连接处理的云(因为它们可能不止一个)