Node.js 套接字IO客户端在初始连接外部使用时不发出

Node.js 套接字IO客户端在初始连接外部使用时不发出,node.js,vue.js,socket.io,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) => {

我有一个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') );
    },
在控制台上,套接字似乎不是空的/未定义的,我尝试将相同的事件发射器放在onloginsucess函数上,它工作正常。当我在其他函数或初始连接之外的地方使用套接字时,它就不起作用了

以下是我的socket 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)
  })

});