如何捕捉当用户离开meteor和/或铁路由器的页面?
我试图赶上,当用户离开我的meteor应用程序(版本1.2.0.2); 相当于服务器端的SocketIO disconnect()
。
用户可以closures他的浏览器,去另一个网站,或者只是刷新页面,然后它会触发
令人惊讶的是,我在互联网上search,一切都混在一起,没有任何工作正常。 我以为meteor就是基于这种神奇的现场处理,所以它必须以某种方式pipe理这个事件。
铁路由器文档指定了这个:
onStop:路线停止时调用,通常在新路线运行之前。
我也发现Router.load
和Router.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.id
pipe理数据,这是您浏览器选项卡的唯一标识符。 这两个解决scheme对我来说都很好。
如果你通过他们的账户系统使用
Meteor.userId
,你不能在服务器端的method
外使用它,所以我必须findconnection.id
的解决方法。
如果有人在获得这种客户端数据的同时有更好的解决scheme来pipe理连接,请不要犹豫,给予您的build议。