首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor.call()方法- Meteor.js

Meteor.call()方法- Meteor.js
EN

Stack Overflow用户
提问于 2016-08-30 14:15:06
回答 2查看 5.5K关注 0票数 2
  1. 何时只对客户端或服务器端请求使用Meteor.call()方法。请指教
  2. 在我的应用程序中,Meteor.users()显示控制台中的所有用户。如何禁用这个。
EN

回答 2

Stack Overflow用户

发布于 2016-08-30 14:34:12

  1. 您应该在客户端使用Meteor.call()来调用服务器端方法。流星有很棒的关于方法的文档
  2. 如果Meteor.users()返回客户端上的所有用户,那么服务器将发布所有用户文档。安装后,您是否删除了流星自动包装 (meteor remove autopublish)?
票数 2
EN

Stack Overflow用户

发布于 2016-08-30 16:34:09

1. Meteor.call()

Meteor.call()通常用于从客户端调用服务器端方法.但是,您也可以在服务器端使用Meteor.call()调用另一个服务器端函数,尽管不建议这样做。

因此,有两种使用Meteor.call()的方法

  • 客户端到服务器的调用(良好实践)
  • 服务器到服务器的调用(不是很好的实践,但很有效)

以下是“流星”( Meteor 文档 )在危急时刻所说的话:

可以使用Meteor.call从客户端和服务器调用此方法。请注意,在某些代码需要从客户端调用的情况下,应该只使用一个方法;如果您只想模块化只从服务器调用的代码,那么使用一个常规的JavaScript函数,而不是一个方法。

2.发布和订阅

为了确保数据是安全的,您需要删除autopublishinsecure包。这将禁用集合的自动发布,并禁止客户端对数据库的免费写入访问。

现在,为了确保您只发布一个集合中您需要发布的部分,您需要设置您的发布(如果已经设置它们,则检查它们)。

Publications: --这就是从服务器到客户端提供数据库集合的功能。

它应该如下所示,在项目中的apiserver文件夹中查找它:

代码语言:javascript
复制
Meteor.publish('allUsers', function() {
  if (!this.userId) {
    return this.ready();
  }
  return Meteor.users.find({});
});

注意,在上面的示例中,我们没有在MongoDB调用中提供任何筛选器参数,所以这个发布将返回一个游标,其中包含数据库中的所有用户。

代码语言:javascript
复制
Meteor.publish('currentUser', function() {
  if (!this.userId) {
    return this.ready();
  }
  return Meteor.users.find({
    _id: this.userId
  });
});

在本出版物中,我们提供了用户_id字段作为筛选器。因此,这将为Meteor.users()返回一个游标,其中只有当前用户对象作为可用项。

为了访问发布,您需要相应地调用客户端代码的订阅,如下所示:

代码语言:javascript
复制
Meteor.subscribe('currentUser');

确保而不是同时订阅了allUsers --因为多个订阅将提供两个订阅的联合集。这样,您的客户端迷你mongo中将有currentUser + allUsers = allUsers。我们不想那样。

在您检查以上内容之后,您可以在客户端代码(或控制台)中使用Meteor.users(),并发现它将只包含当前登录用户的用户数据。

有关发布和订阅的更多详细信息,请参阅正式文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39229966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档