Javascript 服务器上的Meteor集合为空

Javascript 服务器上的Meteor集合为空,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个名为Admins的集合,我使用Admins.findOne({userId:Meteor.userId})来检查一个用户是否是管理员,如果我在Meteor shell中使用它,并且在从浏览器控制台调用我为它定义的方法时这样做,它工作正常,但当我使用它进行服务器端权限检查时,Admins集合似乎是空的(Admins.\u集合.\u文档.\u map是空的。我已经检查过了。)。如果我在服务器端执行,我不知道为什么我的方法不能访问它,但是当我从chrome开发工具调用它时,它工作得很好。我的方

我有一个名为Admins的集合,我使用
Admins.findOne({userId:Meteor.userId})
来检查一个用户是否是管理员,如果我在Meteor shell中使用它,并且在从浏览器控制台调用我为它定义的方法时这样做,它工作正常,但当我使用它进行服务器端权限检查时,Admins集合似乎是空的(
Admins.\u集合.\u文档.\u map
是空的。我已经检查过了。)。如果我在服务器端执行,我不知道为什么我的方法不能访问它,但是当我从chrome开发工具调用它时,它工作得很好。我的方法是:

updateArticle: (id, obj) ->
    console.log Admins //appears to be empty
    console.log Meteor.userId()

    Meteor.call 'hasBasicPermissions', (err,res) ->
      console.log res // false
      if res
        Articles.update(id, obj)
      else
        Meteor.call('notAuthorisedError') // throws the error
isEditor: ->
  !!Editors.findOne {userId: Meteor.userId()} // return true when called in Meteor shell, but is false when used in the method, but only on the server side
isAdmin: ->
  !!Admins.findOne {userId: Meteor.userId()}
hasBasicPermissions: ->
  console.log(Meteor.userId())
  console.log(Admins)
  res = !!Admins.findOne({userId: "9fZmAnoJubaGDZH64"}) or !!Admins.findOne({userId: "9fZmAnoJubaGDZH64"})
  console.log res
  return res
notAuthorisedError : ->
  throw new Meteor.Error("not-authorized");

我猜您是在一个地方定义您的集合(在
@Admins=new Meteor.collection('Admins')
或类似行中),代码仅在客户端上执行:在
客户端
文件夹中的文件中,或在
Meteor.isClient
块中。试着把它放在共享代码中,例如放在
lib
collections
文件夹中。

你能发布你如何实例化你的收藏的代码吗?@MichelH在切换到角色之前我使用了Admins=new(Mongo.collection)('Admins')我确实通过切换到awesome角色包解决了这个问题