簡體   English   中英

流星前端未定義Mongo集合

[英]Mongo collection undefined on Meteor front-end

我的前端有這段代碼,但PlayersList在瀏覽器中未定義:

//client/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");
}

有什么可能是錯的嗎?

您在客戶端具有允許,只需將允許移至服務器代碼即可。

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

注意:

在這種情況下,您將使用meteor.method進行插入

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

您需要知道Meteor.methods跳過了allow / deny(忽略了它們),因此這里沒有理由擁有allows(如果您僅使用此PlayerLists.insert)

因此,只需刪除客戶端代碼中的allow。

或將其移至服務器端。

如果您對使用Allows/denyserver methods有疑問,請查看@david Weldon的出色回答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM