【问题标题】:How do I set a created_on field on the server in a new Meteor Collection document?如何在新的 Meteor Collection 文档中在服务器上设置 created_on 字段?
【发布时间】:2014-01-30 06:29:35
【问题描述】:

我正在建立一个按时间顺序显示帖子的聊天室。我目前是在“entry”模板的submit事件上设置客户端js中用户发帖的时间:

Template.entry.events =  {
  'submit': function(e){
    e.preventDefault();
    //console.log(this.userId());
    var user = Meteor.user();
    var roomName = Session.get('currentRoomName');
    Messages.insert({
      user: user,
      room_name: roomName,
      message: $('#message').val(),
      created_on: new Date().getTime()
    });
    $("#message").val('');
  }
};

我的问题是,因为这个日期是在客户端上设置的,如果用户更改了他们机器上的时间,它将被记录为允许用户在当前对话之前或之后发布。理想情况下,我可以在收到新的聊天条目后更新服务器上的 created_on 时间,以反映服务器上当前的 UTC 时间并更正输入的任何值。我仍然希望有时间在客户端延迟补偿等。

我已经阅读了很多关于 Meteor 的文档,我怀疑我可能会使用 .observe() 来解决这个问题,但我对 Meteor 和 Mongodb 都是新手。观察条目集合中的每个文档会不会很疯狂?是否可以只观察新条目?

我也在使用 auth 分支 - 不确定这是否会有所不同。

如果聊天室中有很多用户,this non-question 最终可能会相关。

抱歉,如果这是我刚刚错过的 Mongo/Meteor 中超级简单的事情。

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    最简单的解决方案是使用一种方法,而不是使用 Messages.insert 创建的隐式方法。

    在服务器上:

    Meteor.methods({
      addMessage: function(room_name, message) {
        Messages.insert({
          userId: this.userId,
          room_name: room_name,
          message: message,
          created_on: new Date().getTime();
        });
      });
    });
    

    在客户端:

    Template.entry.events =  {
      'submit': function(e) {
        e.preventDefault();
        Meteor.call('addMessage', Session.get('currentRoomName'), $('#message').val());
      }
    }
    

    这将立即在客户端创建一条记录(带有客户端的日期),同时在服务器上创建一条记录(带有服务器的日期),然后在下次同步时覆盖客户端的记录。

    【讨论】:

      【解决方案2】:

      我强烈建议您使用auth 分支中引入的ACL。您可以在插入/更新/删除/获取时进行一些验证和/或修改。看看源文件packages/mongo-livedata/collection.js下的Meteor.Collection.prototype.allow

      【讨论】:

      • 更好!我从流星源中的 Todos 示例中获得了提示,并在服务器文件夹中添加了一个新的 access_control 文件,其中包含以下内容: Meteor.startup(function(){ Messages.allow({ insert: function(id, doc){ doc. created_on = new Date().getTime(); return true; } }); });我发现自己说“哇。这很容易”的次数。 Meteor 总是让我感到惊奇。
      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多