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();
}
}
});