Lau*_*ent 6 node.js meteor iron-router
当用户离开我的Meteor应用程序(版本1.2.0.2)时,我试图捕获; 等同于SocketIO disconnect()
服务器端的东西.
用户可以关闭他的浏览器,转到另一个网站或只是刷新页面,无论如何它都会触发
令人惊讶的是,我在互联网上搜索,一切都混乱,没有任何正常工作.我认为Meteor实际上是基于这种神奇的实时处理,所以它必须以某种方式管理这个事件.
Iron路由器文档指定:
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
})
)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?你如何在我的应用程序中捕获此事件?
有两种解决方案有效,我通过在API 文档中搜索了一段时间找到了第二个也是最好的一个。
在控制器/前端端的任何位置,您都必须订阅一个集合
# in coffee
@subscribe('allTargets')
# in javascript
this.subscribe('allTargets')
Run Code Online (Sandbox Code Playgroud)
之后您只需发布并添加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();
});
Run Code Online (Sandbox Code Playgroud)
return Targets.find()
在设置侦听器之前,您必须小心不要这样做onStop
。我认为这不是一个完美的解决方案,因为您不监听连接本身,而是监听集合的更改。
我意识到通过 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
});
});
Run Code Online (Sandbox Code Playgroud)
connection.id
您可以使用浏览器选项卡的唯一标识符来管理数据。两种解决方案对我来说都很有效。
如果您
Meteor.userId
通过他们的帐户系统使用,则无法method
在服务器端之外使用它,因此我必须找到一种解决方法connection.id
。
如果有人有更好的解决方案来管理连接,同时获取此类客户端数据,请随时提供您的意见。