Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor Q:在客户端显示服务器(重新)启动和/或刷新时间。(几乎有效)_Meteor - Fatal编程技术网

Meteor Q:在客户端显示服务器(重新)启动和/或刷新时间。(几乎有效)

Meteor Q:在客户端显示服务器(重新)启动和/或刷新时间。(几乎有效),meteor,Meteor,我想在客户端显示服务器重启时间。比如: <body>Server started at {{serverStartTime}}</body> 注意,Session.get()是同一函数中Session.set()的跟踪诱饵,它并不意味着在Meteor.call()之后同步执行 要获取服务器的启动时间,我们必须 if (Meteor.isServer) { Meteor.startup(function(){ Meteor.ServerStartTime =

我想在客户端显示服务器重启时间。比如:

<body>Server started at {{serverStartTime}}</body>
注意,Session.get()是同一函数中Session.set()的跟踪诱饵,它并不意味着在Meteor.call()之后同步执行

要获取服务器的启动时间,我们必须

if (Meteor.isServer) {
  Meteor.startup(function(){
    Meteor.ServerStartTime = new Date();
  }); 
}
Meteor.methods({
  getServerStartTime: function(){
    var sst = Meteor.ServerStartTime;
    if(sst){
      console.log(Meteor.ServerStartTime);  // for info
      return sst.toLocaleTimeString();
    }  
  }
});
这在某种程度上起作用,但:

(a) 让助手递归地动作让我感觉脏兮兮的。梦魇无限循环的可能性

(b) 它选择重新启动(即当js被更改时),但不选择刷新(即 仅更改html时)


我是新来的流星。有没有更简单、更安全、更清晰的方法

要解决无限循环的可能性,您只需将方法调用移到辅助对象之外,以便在加载页面时它运行一次:

Meteor.call(“getServerStartTime”,函数(err,res){ Session.set('sStartTime',res); }); Template.body.helpers({ serverStartTime:函数(){ return Session.get('sStartTime')) } }); 要解决刷新问题(当服务器重新启动而不触发浏览器刷新时,客户端的值不会刷新),可以改用自定义发布功能。我在一个实验室里测试了这个。在服务器中:

var startupTime=新日期();
Meteor.publish(“startupTime”,函数(){
添加(“startupTime”、“startupTime”、{startupTime:startupTime});
这个;
});
在客户机中:

var StartupTime=新的Mongo.Collection(“StartupTime”);
var startupTimeSub=Meteor.subscribe(“startupTime”);
然后,您可以使用
StartupTime.findOne().StartupTime
(假设订阅已准备就绪,您可以使用
startupTimeSub.ready()
)以反应方式获取服务器启动时间。当服务器重新加载时,即使客户端不需要刷新,该值也会更新(例如,您只更改了服务器端代码)

对于客户端来说,这看起来像是服务器有一个名为
startupTime
的mongo集合,其中包含一个文档
{u id:“startupTime”,startupTime:}
。但事实上,这个收藏并不存在

if (Meteor.isServer) {
  Meteor.startup(function(){
    Meteor.ServerStartTime = new Date();
  }); 
}
Meteor.methods({
  getServerStartTime: function(){
    var sst = Meteor.ServerStartTime;
    if(sst){
      console.log(Meteor.ServerStartTime);  // for info
      return sst.toLocaleTimeString();
    }  
  }
});