Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Node.js 关闭窗口前调用REST API(React)_Node.js_Reactjs_Mongodb_Axios_Fetch - Fatal编程技术网

Node.js 关闭窗口前调用REST API(React)

Node.js 关闭窗口前调用REST API(React),node.js,reactjs,mongodb,axios,fetch,Node.js,Reactjs,Mongodb,Axios,Fetch,我正在创建一个React应用程序,它在用户访问应用程序时创建一个用户,并在用户关闭浏览器或重新加载时从数据库中删除该用户。对于后端,我使用了Mongodb和Nodejs。 我尝试过使用unload和beforeunload事件侦听器,但似乎不起作用。有人能帮我吗你能做的最好的方法是从后端使用轮询机制来检查窗口是否仍然打开。以下是我能想到的两种解决方案: 建立从窗口到服务器的websocket连接。如果套接字关闭=>窗口关闭(Firebase将此方法用于其onDisconnect) 使用setIn

我正在创建一个React应用程序,它在用户访问应用程序时创建一个用户,并在用户关闭浏览器或重新加载时从数据库中删除该用户。对于后端,我使用了Mongodb和Nodejs。
我尝试过使用unload和beforeunload事件侦听器,但似乎不起作用。有人能帮我吗

你能做的最好的方法是从后端使用轮询机制来检查窗口是否仍然打开。以下是我能想到的两种解决方案:

  • 建立从窗口到服务器的websocket连接。如果套接字关闭=>窗口关闭(Firebase将此方法用于其
    onDisconnect
  • 使用
    setInterval
    定期向后端发送ping(通过restapi)。如果后端不再接收ping,则表示窗口关闭

  • 此外,您可以为每个窗口分配一个随机ID。它将有助于检测用户仍然打开窗口但他们失去连接的情况。

    您可以做的最好的方法是从后端使用轮询机制来检查窗口是否仍然打开。以下是我能想到的两种解决方案:

  • 建立从窗口到服务器的websocket连接。如果套接字关闭=>窗口关闭(Firebase将此方法用于其
    onDisconnect
  • 使用
    setInterval
    定期向后端发送ping(通过restapi)。如果后端不再接收ping,则表示窗口关闭
  • 此外,您可以为每个窗口分配一个随机ID。它将有助于检测用户仍然打开窗口但他们失去连接的情况。

    React客户端在退出之前执行“componentWillUnmount”。总是

    因此,在那里调用服务器清理API


    正如丹提醒我的那样,这种方法是不可靠的。正确的方法是在节点/express端使用express会话实现会话,因此一旦用户会话过期,会话存储中的整个用户条目都将被取消

    React客户端在退出前执行“componentWillUnmount”。总是

    因此,在那里调用服务器清理API



    正如丹提醒我的那样,这种方法是不可靠的。正确的方法是在节点/express端使用express会话实现会话,因此一旦用户会话过期,会话存储中的整个用户条目都将被取消

    您可以显示一些代码吗?您可以显示一些代码吗?
    组件将卸载
    不保证在用户关闭浏览器或选项卡,或导航到其他站点时运行。我认为我们现在正在进入服务器端会话领域。。。因为从技术上讲,如果您想讨论超时、挂起的选项卡等问题,没有“可靠”的客户端解决方案可以完成。
    componentWillUnmount
    不保证在用户关闭浏览器或选项卡或导航到其他站点时运行。我想我们现在正在进入服务器端会话领域。。。因为从技术上讲,如果您想讨论超时、挂起的选项卡等问题,就没有“可靠”的客户端解决方案。