Meteor前端未定义Mongo集合



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

//client/allowHelpers.js

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

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

但它是在我的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");
}

可能出了什么问题?

您在客户端拥有allow,只需将allow代码移动到服务器即可。

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

注意:

在这种情况下,您使用的是metro.method来制作插入

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

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

因此,只需删除客户端代码中的allow即可。

或者将其移动到服务器侧。

如果您对使用Allows/denyserver methods

有疑问,请查看@david Weldon的这个精彩答案

最新更新