我想向我的客户发布在线用户列表,并且出于安全原因排除除“用户名”属性以外的所有用户。我有以下服务器端发布:
Meteor.publish 'onlineUsers', ->
users = Meteor.users.find
"services.resume.loginTokens.0":
$exists: true
它工作正常,产生以下输出:
console.log users.fetch()
>> [{
id: 'kFney2anhwZC4w4zX',
createdAt: Fri Jan 31 2014 20:04:40 GMT+0400 (MSK),
<...>
},
{ _id: 'tLNbhoqCex46v5L7s',
createdAt: Fri Jan 31 2014 20:05:04 GMT+0400 (MSK),
...
}]
但是当我添加“fields”选项来发布参数时,结果是一个空列表:
Meteor.publish 'onlineUsers', ->
users = Meteor.users.find
"services.resume.loginTokens.0":
$exists: true
fields:
username: true
console.log users.fetch()
>> []
所以问题是:
UPD:
正如Andrew Mao注意到的那样,我在使用CoffeeScript语法时遇到了错误。如果没有前面的逗号,则fields
选项是第一个参数对象的一部分。正确的方法调用应该如下:
Meteor.users.find
"services.resume.loginTokens.0":
$exists: true
,
fields:
username: true
答案 0 :(得分:0)
您正在使用Coffeescript并使用其语法出错。 fields
需要成为find
的第二个参数的关键,而不是第一个参数。你可以写的一种方法是
Meteor.publish 'onlineUsers', ->
users = Meteor.users.find {"services.resume.loginTokens.0": {$exists: true}},
{ fields:
{ username: true }
}
上面所有花括号实际上都是可选的,只是用来显示结构。一旦你更熟悉coffeescript,你可以省略它们。但是那个非常重要的逗号必须在你的论点之间。