流星前端的Mongo集合未定义

时间:2015-02-12 06:25:27

标签: javascript mongodb meteor

我的前端有这个代码,但PlayersList在浏览器中未定义:

//客户/ allowHelpers.js

Meteor.startup(function() {

    PLayersList.allow({
  insert: function (userId, doc) {
    return true;
  }
    });   
});

(PlayersList var在上面的代码块中未定义。)

但它是在我的Meteor lib目录中定义的,其中我有这个包含服务器/客户端JavaScript的setup.js文件:

// LIB / setup.js

  PlayersList = new Mongo.Collection("PlayersList");

  if(Meteor.isServer){
             Meteor.publish('thePlayers', function(){
             var currentUserId = this.userId;
             return PlayersList.find({createdBy: currentUserId})

             });

          PlayersList.allow({
               insert: function (userId, doc) {
                 return true;
          }
        });

          PlayersList.before.update(function (userId, doc, fieldNames, modifier, options) {
           console.log('about to insert:',userId,doc,fieldNames,modifier,options);
        });

          PlayersList.before.insert(function (userId, doc, fieldNames, modifier, options) {
            console.log('about to insert:',userId,doc,fieldNames,modifier,options);
        });

            PlayersList.after.insert(function (userId, doc, fieldNames, modifier, options) {
            console.log('just inserted:',userId,doc,fieldNames,modifier,options);
        });

    Meteor.methods({

        sendLogMessage: function(msg){
          console.log("Message from server:" + msg);
        },

        insertPlayerData: function(playerName){

            var currentUserId = Meteor.userId();

            PlayersList.insert({
               name: playerName,
               score: 0,
               createdBy: currentUserId
          });
        },

          removePlayerData: function(selectedPlayer){
             PlayersList.remove(selectedPlayer);
           }
        });
}

if(Meteor.isClient){
    Meteor.subscribe('thePlayers');
    Meteor.subscribe("PlayersList");
}

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

您在客户端有允许,只需将allow转移到服务器代码。

 PLayersList.allow({
    insert: function (userId, doc) {
      return true;
      }
    });

注意:

在这种情况下,您使用meteor.method进行插入

PlayersList.insert({
               name: playerName,
               score: 0,
               createdBy: currentUserId
          });

你需要知道Meteor.methods跳过允许/拒绝(忽略它们),所以没有理由在这里允许(如果你只使用这个PlayerLists.insert)

所以只需删除客户端代码中的allow。

或将其移至服务器端。

如果您对使用Allows/denyserver methods

有疑问,请查看来自@david Weldon的此awesome answer