使用流星列出客户端上的所有用户
Posted
技术标签:
【中文标题】使用流星列出客户端上的所有用户【英文标题】:Listing all users on client with meteor 【发布时间】:2012-11-12 07:57:51 【问题描述】:根据流星文档,如果安装了自动发布包,所有用户都应该发布到所有客户端。
http://docs.meteor.com/#meteor_users
我已经安装了自动发布包,但是在Meteor.users
上使用forEach
只会列出当前登录的用户。
有没有更正确的方法使用coffeescript列出客户端上的所有用户?
【问题讨论】:
这是文档中的错误吗?有一个相关的已关闭问题github.com/meteor/meteor/issues/517 【参考方案1】:这是 Meteor 的 Parties example 的摘录:
// in server.js
Meteor.publish("directory", function ()
return Meteor.users.find(, fields: emails: 1, profile: 1);
);
// in client.js
Meteor.subscribe("directory");
【讨论】:
示例已不存在,如何迭代模板中的每个用户? 这里是:github.com/meteor/meteor/tree/devel/examples/other/parties(代码相同,更新链接)【参考方案2】:如果您在不使用订阅的情况下自动发布用户集合
if Meteor.isServer
Meteor.publish null, ->
Meteor.users.find ,
fields:
username: 1
profile: 1
如果你想订阅指定用户,你可以
if Meteor.isServer
Meteor.publish 'users-by-selector', (options) ->
Meteor.users.find options, # options as selector like $in: name: 'john'
fields: # use fields to only publish specify fields you want to send.
username: 1
profile: 1
if Meteor.isClient
Meteor.autosubscribe ->
options = Session.get 'your mongodb selector'
Meteor.subscribe 'users-by-selector', options, ->
console.log 'on Subscribe Complete Callback.'
if Meteor.users.find().count()
Session.set 'specifyUsersLoaded', true
【讨论】:
您的第一个 sn-p 有效,尽管我必须在fields:
下添加 emails: 1
,因为 username
和 profile
对于所有用户都是空的。显然,除非在其自动发布的字段中有值,否则不会自动发布用户。
我没有找到@danielsvane 提到的限制。不过要注意的一件事是,不同的提供程序包提供不同的数据结构。当您考虑它时,这是有道理的,但如果您还没有准备好,它可能会令人困惑。上面@crapthings 的代码(包括profile
和username
)可以很好地获取Facebook 和accounts-password
软件包的用户名。要从user
记录中获取用户名,您需要user.username || user.profile.name
。
伟大而有帮助的答案 +1,但假设 CoffeeScript 为 -1。问题未标记为 CoffeeScript。它不叫 Meteor.coffee
@BjornTipling 我使用的是 CoffeeScript,所以他的回答很准确。
@danielsvane 您在问题中究竟在哪里使用了 CoffeeScript?以上是关于使用流星列出客户端上的所有用户的主要内容,如果未能解决你的问题,请参考以下文章