如何捕捉当用户离开meteor和/或铁路由器的页面?

我试图赶上,当用户离开我的meteor应用程序(版本1.2.0.2); 相当于服务器端的SocketIO disconnect()

用户可以closures他的浏览器,去另一个网站,或者只是刷新页面,然后它会触发

令人惊讶的是,我在互联网上search,一切都混在一起,没有任何工作正常。 我以为meteor就是基于这种神奇的现场处理,所以它必须以某种方式pipe理这个事件。

铁路由器文档指定了这个:

onStop:路线停止时调用,通常在新路线运行之前。

我也发现Router.loadRouter.unload但没有一个工作。 这是我目前的[不工作]代码,这是非常简单的

 Router.configure layoutTemplate: 'MasterLayout' loadingTemplate: 'Loading' notFoundTemplate: 'NotFound' Router.onStop (-> console.log('Try to stop') Users.insert({ name: "This is a test" lat: 0 lng: 0 }) ) 

我在这里做错了什么? 你如何在我的应用程序中捕获这个事件?

您需要附加到路由的onStop ,而不是路由器。 例如:

 Router.route('/', { onStop: function() { console.log("someone left the '/' route"); } }); 

另一种select是使用订阅的onStop 事件 。 这可能是最类似于您提到的socketio断开连接的选项。 你可以在typhone源代码中find一个例子 。

有两个解决scheme工作,我find了第二个,也是最好的一个在API文档中search一段时间。

第一个解决scheme:使用订阅和发布

在控制器/前端的任何地方,您都必须订阅一个集合

 # in coffee @subscribe('allTargets') # in javascript this.subscribe('allTargets') 

之后,您只需发布并添加onStop侦听器。 这个例子将采用我之前已经定义的Targets集合,它只是获取所有的条目。

 # in coffee Meteor.publish 'allTargets', -> @onStop -> # Do your stuff here return Targets.find() # in javascript Meteor.publish('allTargets', function() { this.onStop(function() { // Do your stuff here }); return Targets.find(); }); 

在设置onStop侦听器之前,您必须小心不要return Targets.find() 。 我不认为这是一个完美的解决scheme,因为你不听连接本身,而是收集的变化。

第二种解决scheme:使用DDP连接

我通过Meteor API文档意识到,我们可以直接监听连接,看看是否有人从服务器端断开连接。

为了在我的Meteor Iron项目中保持良好的组织和清洁,我在app/server/connection.coffee添加了一个新文件,并编写了这个代码

 # in coffee Meteor.onConnection (connection) -> connection.onClose -> # Do your stuff # in javascript Meteor.onConnection(function(connection) { connection.onClose(function() { // Do your stuff }); }); 

您可以使用connection.idpipe理数据,这是您浏览器选项卡的唯一标识符。 这两个解决scheme对我来说都很好。

如果你通过他们的账户系统使用Meteor.userId ,你不能在服务器端的method外使用它,所以我必须findconnection.id的解决方法。

如果有人在获得这种客户端数据的同时有更好的解决scheme来pipe理连接,请不要犹豫,给予您的build议。