【问题标题】:Meteor.call to get server time to set in object's properties?Meteor.call 获取服务器时间来设置对象的属性?
【发布时间】:2014-09-25 21:38:43
【问题描述】:

我想在我的数据库条目中使用时间日志,并且我希望始终从服务器获取时间。

到目前为止,我设置了这个:

Meteor.methods({
    getTimeFromServer: function () {
        var serverTime = new Date().toLocaleTimeString();
            return serverTime;
    }
});

我想这样使用它们:

Template.myTemplate.events({
    'click .btn': function(e) {
        var propsOfObject = {
            name: $('#idName').val(),
            email: $('#idEmail').val(),
            time: Meteor.call('getTimeFromServer')
            }
        Meteor.call('addItemToDataBase', propsOfObject)
    }
});

无法弄清楚我做错了什么。我没有收到任何错误消息。 'time' 属性是空的。

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    首先,您的方法不起作用,因为客户端上的 Meteor.call 始终是异步的:它不会立即返回任何内容,您必须提供回调以稍后获取结果。

    更多内容在这里:Meteor.methods returns undefined

    我认为您应该直接在插入方法中获取服务器时间,而不是在插入之前尝试从服务器获取它:它会为您节省一个方法调用并且它也更简单。

    客户:

    Template.myTemplate.events({
      'click .btn': function(e) {
        var propsOfObject = {
          name: $('#idName').val(),
          email: $('#idEmail').val()
        };
        Meteor.call('addItemToDataBase', propsOfObject)
      }
    });
    

    服务器:

    Meteor.methods({
      addItemToDatabase:function(fields){
        check(fields,{
          name:String,
          email:String
        });
        //
        _.extend(fields,{
          time:new Date().toLocaleTimeString()
        });
        //
        MyCollection.insert(fields);
      }
    });
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    • 实际上,我现在在不同的 PC 上尝试过,得到的时间不同。这是我想避免的。每个用户都应该看到服务器的时间。
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多