Node.js 套接字IO客户端在初始连接外部使用时不发出
我有一个Vue应用程序,在用户登录时设置套接字连接。 我的组件有一个方法,可以访问我创建的外部变量套接字,这样我就可以在其他方法中发出事件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) => {
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)
})
});