javascript - Mongo 集合在 Meteor 前端未定义

标签 javascript mongodb meteor

我的前端有此代码,但 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 会跳过允许/拒绝(忽略它们),因此没有理由在此处允许(如果您仅使用此 PlayerLists.insert)

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

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

看看这个 awesome answer如果您对使用允许/拒绝服务器方法

有疑问,来自@david Weldon

关于javascript - Mongo 集合在 Meteor 前端未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470752/

相关文章:

mongodb - 我如何要求 MongoDB 评估一些 JavaScript 以获得字段的值?

javascript - csv 到 json 转换错误

javascript - Meteor - 当模板被销毁时停止跟踪器自动运行(用户离开页面)

javascript - iOS 8.3 Mobile Safari 禁用表情符号渲染

javascript - 如何使 X 轴上的 NVD3 discreteBarChart 标签适应标签的宽度或数量?

scala - 使用 Casbah/Salat 定义自定义序列化 - 或者将序列化委托(delegate)给成员?

javascript - 在 Meteor 中添加时间和日期

javascript - React.js onChange 让 parent 知道改变的状态

javascript - 有没有办法使用 console.print 语句在 devtools 控制台中打印 javascript 源文件的链接和行号?

algorithm - (facebook like app) show post algorithm design