Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在用户关闭网站之前触发http调用?_Javascript_Node.js_Angular - Fatal编程技术网

Javascript 如何在用户关闭网站之前触发http调用?

Javascript 如何在用户关闭网站之前触发http调用?,javascript,node.js,angular,Javascript,Node.js,Angular,我正在尝试建立一个聊天网站。在这种情况下,用户还具有脱机或联机状态。如果用户登录,则将用户设置为联机;如果用户注销或关闭选项卡或关闭网站,则将用户设置为脱机。当前我使用的是beforeunload事件。当我的后端在本地主机上时,它工作得很好,但当我将后端转移到主机上时,用户的状态并没有从脱机变为联机 // on app.component.ts file.. @HostListener('window:beforeunload') changeStatus() { this.http.g

我正在尝试建立一个聊天网站。在这种情况下,用户还具有脱机或联机状态。如果用户登录,则将用户设置为联机;如果用户注销或关闭选项卡或关闭网站,则将用户设置为脱机。当前我使用的是beforeunload事件。当我的后端在本地主机上时,它工作得很好,但当我将后端转移到主机上时,用户的状态并没有从脱机变为联机

// on app.component.ts file..
 @HostListener('window:beforeunload') changeStatus() {
   this.http.get('some url to make the users status offline').subscribe()
}

这一个没有将后端转移到主机mechine上。我想这是因为这是一个异步调用,浏览器在完成之前终止该线程。所以这个异步调用没有找到。。我尝试使用
navigator.sendBeacon()
,但主要问题是我找不到任何解决方案通过
navigator.sendBeacon()发送承载令牌
方法,我的http调用实际上依赖于该承载令牌。那么,在用户关闭选项卡之前,如何发送一些http请求,以便在数据库中用户状态更改为脱机?我使用的是angular…

有,但是你可以通过定期检查用户是否处于活动状态(可以联系到)来做得更简单。如果没有,则它们处于脱机状态。我必须更改数据库中的用户状态。因此,我需要进行httpcall,以将数据库中的用户状态更改为脱机。我上面提到,我找不到通过beacon api发送承载令牌头的方法。您可以打开websocket连接(或socket.io),当套接字关闭时,在服务器端将用户标记为脱机。@sahilaktar如果要求客户端通知其状态,则数据库中的信息可能不正确。一个简单的例子是计算机/浏览器崩溃。那么用户不在线,但是您没有在数据库中反映他们的真实状态。你也可以让用户故意操纵它,在不在线的情况下发送离线电话。这是否是恶意的取决于结果是否会被滥用。在这种情况下,信标确实是最安全的选择。您必须在API上创建一个接受有效负载(例如使用uid)而不是头标记的自定义端点。