发布于 2016-08-30 14:34:12
发布于 2016-08-30 16:34:09
1. Meteor.call()
Meteor.call()通常用于从客户端调用服务器端方法.但是,您也可以在服务器端使用Meteor.call()调用另一个服务器端函数,尽管不建议这样做。
因此,有两种使用Meteor.call()的方法
以下是“流星”( Meteor 文档 )在危急时刻所说的话:
可以使用Meteor.call从客户端和服务器调用此方法。请注意,在某些代码需要从客户端调用的情况下,应该只使用一个方法;如果您只想模块化只从服务器调用的代码,那么使用一个常规的JavaScript函数,而不是一个方法。
2.发布和订阅
为了确保数据是安全的,您需要删除autopublish和insecure包。这将禁用集合的自动发布,并禁止客户端对数据库的免费写入访问。
现在,为了确保您只发布一个集合中您需要发布的部分,您需要设置您的发布(如果已经设置它们,则检查它们)。
Publications: --这就是从服务器到客户端提供数据库集合的功能。
它应该如下所示,在项目中的api或server文件夹中查找它:
Meteor.publish('allUsers', function() {
if (!this.userId) {
return this.ready();
}
return Meteor.users.find({});
});注意,在上面的示例中,我们没有在MongoDB调用中提供任何筛选器参数,所以这个发布将返回一个游标,其中包含数据库中的所有用户。
Meteor.publish('currentUser', function() {
if (!this.userId) {
return this.ready();
}
return Meteor.users.find({
_id: this.userId
});
});在本出版物中,我们提供了用户_id字段作为筛选器。因此,这将为Meteor.users()返回一个游标,其中只有当前用户对象作为可用项。
为了访问发布,您需要相应地调用客户端代码的订阅,如下所示:
Meteor.subscribe('currentUser');确保而不是同时订阅了allUsers --因为多个订阅将提供两个订阅的联合集。这样,您的客户端迷你mongo中将有currentUser + allUsers = allUsers。我们不想那样。
在您检查以上内容之后,您可以在客户端代码(或控制台)中使用Meteor.users(),并发现它将只包含当前登录用户的用户数据。
有关发布和订阅的更多详细信息,请参阅正式文档。
https://stackoverflow.com/questions/39229966
复制相似问题