我试图在我的Meteor应用程序(版本1.2.0.2)中用户离开时抓住;等同于服务器端SocketIO disconnect()
的东西。
用户可以关闭浏览器,转到其他网站或只是刷新页面,无论如何都会触发
令人惊讶的是,我在互联网上搜索,一切都搞不定,没有任何正常工作。我认为Meteor实际上是基于这种神奇的实时处理所以它必须以某种方式管理这个事件。
铁路由器文档指定了这个:
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
})
)
我在这里做错了吗?你如何在我的应用程序中捕获此事件?
答案 0 :(得分:3)
您需要附加到路由的onStop
,而不是路由器。例如:
Router.route('/', {
onStop: function() {
console.log("someone left the '/' route");
}
});
另一种选择是使用onStop
event of subscriptions。这可能是与您提到的socketio断开最相似的选项。你可以找到an example of that in the typhone source code。
答案 1 :(得分:3)
有两个解决方案正常工作,我通过在API Documentation搜索了一段时间找到了第二个和最好的解决方案。
在控制器/前端的任何地方,您必须订阅集合
# 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();
});
在设置return Targets.find()
侦听器之前,必须注意不要onStop
。我不认为这是一个完美的解决方案,因为你不是在听取连接本身而是收听集合的变化。
我通过Meteor API Documentation意识到我们可以直接收听连接并查看是否有人从服务器端断开连接。
为了在我的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
来管理数据,该Meteor.userId
是浏览器标签的唯一标识符。这两种解决方案都适合我。
如果您通过其帐户系统使用
method
,则无法在服务器端的connection.id
之外使用它,因此我必须找到{{1}}的解决方法
如果有人在获取此类客户数据时有更好的解决方案来管理连接,请不要犹豫,提供您的意见。