node.js - 如何使断开连接事件仅在用户从帐户注销时触发(node.js + Express socket.io)

标签 node.js express socket.io

我有一个从帐户出去的功能:

exports.logout = function(req,res){
    req.session.destroy( err => {
        if(err)
            console.log(err);
       res.redirect("/login");
    });
 };

为了一起使用 socket.io 和express,我有一个中间件:

io.use(function(socket, next) {
  sessionMiddleWare(socket.request, socket.request.res, next);
});

我有使用 socket.io 的功能。仅当用户从应用程序注销时,我才需要断开事件触发。但现在,当我刷新页面时,我的断开连接事件总是会发出:

exports.someFunction = function (io) {

    io.on('connection', function(socket){
        console.log(`Client connected socketId = ${socket.id}`);
        console.log("session_id: " + socket.request.session.session_id);
        usersMap.set(socket.request.session.session_id, socket.id);

       });
          socket.on('disconnect', function(){
             usersMap.delete(socket.request.session.session_id);
             console.log('user disconnected');
             console.log("Map size: " + usersMap.size);     
          });
        });
};

请帮忙,如何使断开连接事件仅在用户从帐户注销时触发。对不起我的英语不好。

最佳答案

您不应该使用 socket.io 的内置断开事件来实现此目的。每当用户与服务器的连接断开(当他离开您的网站或刷新网站时发生)时,就会发出该信号,这并不等同于他或她注销。

由于您有服务器端注销功能,因此您可以在其中看到有人注销。

关于node.js - 如何使断开连接事件仅在用户从帐户注销时触发(node.js + Express socket.io),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078890/

相关文章:

node.js - Heroku 部署错误上的 Webpack Node.js

json - 如何在 Node 中解析非结构化 JSON 文件?

html - node.js - 将焊接与 express 一起使用?

node.js - 如何在 node.JS 项目上使用 Cassandra CLI?

node.js - 使用socket.io + express + webpack无法连接Node.js服务器,请求返回404错误

node.js - Node 杀死线程但不杀死进程

node.js - Sequelize findAll() 尝试获取未注册的字段

javascript - Node.js POST 不起作用

node.js - Socket.io + Node.js 跨域请求被阻止

vue.js - 如何 : Vue3 composition API plugin