我目前正试图在Node.js
,Express.js
和Socket.IO
上创建一个小聊天应用程序,但我有一个格式化它的问题:出于某种原因,而不是在格式化消息中实际使用<span>
标签,它将它们打印到聊天。
我试着用不同的方式格式化它,创建一些其他的函数来完成它,到目前为止都没有效果。
为什么会这样呢?
server.js
socket.on('message', (message) => {
const timestamp = new Date().toLocaleTimeString([], { hour12: false, hour: '2-digit', minute: '2-digit' });
const usernameSpan = `<span class="chat-user">${users[socket.id]}</span>`;
const messageSpan = `<span class="chat-message">${message}</span>`;
const timeSpan = `<span class="chat-time">[${timestamp}]</span>`;
const formattedMessage = `${timeSpan} ${usernameSpan}: ${messageSpan}`;
if (message.startsWith('/')) {
const [command, ...args] = message.split(' ');
switch (command) {
// commands go here
}
} else {
messages.push(formattedMessage);
if (messages.length > MAX_MESSAGES) { // if >500 messages already stored
messages.shift();
}
io.emit('message', formattedMessage);
console.log(`${users[socket.id]}: ${message}`);
fs.appendFile('recent-messages.txt', `${formattedMessage}n`, (err) => {
if (err) {
console.error(err);
}
});
}
});
client.js
messageForm.addEventListener('submit', (event) => {
event.preventDefault();
const message = messageInput.value;
if (message) {
socket.emit('message', message);
messageInput.value = '';
checkForSpam();
}
});
socket.on('message', (message) => {
const messageElement = document.createElement('div');
messageElement.setAttribute('class', 'message');
messageElement.textContent = message;
messagesDiv.appendChild(messageElement);
chatBoxDiv.scrollTop = chatBoxDiv.scrollHeight;
checkForSpam();
});
修复了它,必须将messageElement.textContent = message;
替换为messageElement.innerHTML = formattedMessage;
,还添加了另一个基于RegEx的格式化消息的功能。