在初始连接外部使用时,套接字IO客户端不发光

时间:2019-04-15 19:20:42

标签: node.js vue.js socket.io

我有一个Vue应用,可以在用户登录时设置套接字连接。 我的组件有一个方法可以访问我制作的外部变量套接字,以便可以用其他方法发出事件。

onLoginSuccess() {
     socket = io(`${process.env.SERVER_URL}`);
     socket.emit('login', localStorage.getItem('username'));
     socket.on('login-response', (response) => {
       if (!response.status) {
         alert(response.message);
         return false;
       } else {
         this.$router.push("/home");
         this.$refs.form.reset();
       }
     });
}

但是,当我尝试在另一个事件中执行socket.emit时,它不起作用:

    onSocketLogout() {
      console.log('socket logout call', socket)
      socket.emit('delete_username_from_array', localStorage.getItem('username') );
    },

套接字在控制台上似乎不是null / undefined,我尝试将相同的事件发射器放在onLoginSuccess函数上,并且工作正常。当我在其他功能中使用套接字或在初始连接之外放置套接字时,该命令将无法正常工作。

这是我的套接字io服务器代码:

let logged_in_users = [];
const io = require('socket.io')(http);

io.on('connection', function(socket){
  console.log(`Socket ${socket.id} connected`);

  socket.on('login', function(username){
    // check duplicates
    if(logged_in_users.includes(username)){
      socket.emit('login-response', {
        message: 'It seems that you have already logged in on another browser. Please logout first.',
        status: false
      });
      return false;
    }else{
      socket.emit('login-response', {status: true});
      console.log(`${username} logged in`)
      logged_in_users.push({ username, id: socket.id });
    }
  });

  // for logout
  socket.on('delete_username_from_array', function(username){
    console.log('removing username from array')
    // delete the username from the array of logged in users
    logged_in_users.splice( logged_in_users.indexOf(username), 1 );
  });

  socket.on('test', () => {
    console.log("TEST")
  })

  socket.on('disconnect', () => {
    console.log(`Socket ${socket.id} disconnected`);
    console.log(logged_in_users)
  })

});

0 个答案:

没有答案