javascript - 用户断开连接后如何重新连接到聊天应用程序(socket js)
问题描述
我正在创建一个带有套接字的聊天应用程序,您首先进入登录页面输入您的昵称,然后加入聊天。
在表单和消息区域之间的聊天页面中,我有一个断开连接按钮,可将您带回登录页面。这个想法是您应该能够输入一个昵称(相同或新的)并再次加入聊天(不查看以前的历史记录)。
我设法将它们发送到登录页面,但由于某种原因,它们无法再次重新连接。
有什么我缺少的东西来完成这项工作吗?
监听服务器文件的断开连接
socket.on('disconnect', () => {
socket.broadcast.emit('user-disconnected', users[socket.id]);
delete users[socket.id];
console.log('bye bye');
});
chat.js 发出断开连接并发送回登录页面
const feedbackBox = message => {
showFeedback.innerText = message;
showFeedback.classList.add('feedback-I-disconnect');
showFeedback.classList.remove('hide');
container.appendChild(showFeedback);
};
disconnectButton.addEventListener('click', event => {
if (event.target.classList.contains('disconnect-button')) {
socket.disconnect();
messageContainer.classList.add('hide');
messageForm.classList.add('hide');
disconnectButton.classList.add('hide');
appendForm();
feedbackBox('You disconnected from the chat');
}
});
name.js 是登陆页面
const getName = () => {
form.addEventListener('submit', e => {
e.preventDefault();
const name = nameInput.value;
socket.emit('new-user', name);
nameInput.value = '';
socket.off('name-taken');
socket.on('name-taken', () => {
feedbackBox('Nickname already taken');
});
socket.off('user-accepted');
socket.on('user-accepted', () => {
title.classList.add('hide');
nameContainer.classList.add('hide');
addMessageForm();
});
});
};
const appendForm = () => {
nameInput.classList.add('name_input');
form.appendChild(nameInput);
submitName.classList.add('submit_name');
form.appendChild(submitName);
nameContainer.appendChild(form);
nameContainer.classList.add('name_container');
nameContainer.classList.remove('hide');
title.classList.remove('hide');
title.classList.add('name_title');
container.appendChild(title);
container.appendChild(nameContainer);
getName();
};
解决方案
推荐阅读
- html - 当表格垂直扩展至其最大高度时 - 使元素在下一个表格单元格列中弹出
- sql-server - 无法使用 SQL Server 数据库访问 Cloud SQL 上的导入数据
- php - phpoffice/电子表格如何在图表中为每一列添加一个值
- node.js - 使用 Express 在 Node.js 中返回调用不起作用
- python - 使用列表中的索引值从大型数据帧创建较小的数据帧
- javascript - TypeScript 枚举到特定对象
- php - 无法打开 PHP,dyld:库未加载
- spring-boot - Spring-Kafka 似乎阻止 Spring Boot web 正常运行
- ibm-appid - 我无法在 Kubernetes 上安装 app-identity-and-access-adapter
- c++ - 多个可变参数函数的单个模板参数包?