#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) => {
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, и она работает нормально. Он просто не работает, когда я использую сокет в других функциях или местах вне начального соединения.
Вот мой код сервера ввода-вывода сокета:
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)
})
});