【发布时间】:2020-04-16 06:36:37
【问题描述】:
所以我关注了几个关于类似问题的问题,但是,这些问题及其适当的解决方案来自多年前,从那时起,socket.io 已经看到一些更新,导致他们的代码无法使用。我已尝试对其进行调整以适应 v2.3.0,但它不起作用。
我正在尝试制作一个聊天应用程序,它有几个变量,我尝试通过每个 io.emit 事件(图片、名称、标签、消息等)发出这些变量
目前,我的服务器端代码如下所示:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
显然不止这些,但这是唯一相关的代码,其余部分都可以正常运行。在我的客户端,每个事件都会与事件一起发送所有变量(我相信)。它看起来像这样:
var userName = "<?=$_SESSION['userName'];?>"
var userTag = "<?php if($userRank == 7) { echo "[Owner]";} elseif ($userRank == 3) { echo "[Mod]";} elseif ($userRank == 5) { echo "[Admin]";} else {}?>"
var userPicture = "<?=$userPicture?>"
$('.chatMessageSubmitForm').submit(function(e){
e.preventDefault();
e.stopPropagation();
socket.emit('chatMessage', { message: $('#messageField').val(), username: userName, tag: userTag, userpiclink: userPicture});
$('#messageField').val('');
return false;
});
socket.on('chatMessage', function(msg){
$('.chatMessageList').append($('<li><img src="'+ postpiclink + '"class="chatMessageUserPicture"><h2 class="chatUserName">' + sendertag + sendname + '</h2>').text(sendmessage));
});
据我所知,这应该是正确的格式,但是当我尝试发送聊天消息时,我的服务器终端上会出现以下消息:
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
ReferenceError: username is not defined
我并没有完全脑死,所以很明显,当套接字发出它时,它没有接收到用户名变量,但我不知道为什么。任何帮助将不胜感激。
【问题讨论】:
-
在调用
io.emit()之前,您必须向我们展示username变量的定义位置以及应该设置它的代码。您没有向我们展示任何代码,因此我们不知道为什么没有定义它,除非您从未在此范围内定义变量。我希望你意识到通过 socket.io 接收一些数据并不会自动定义任何你可以引用的变量,就像你使用username一样。 -
您是否应该引用
msg.username而不仅仅是username? -
可能吗? socket io 是否获取了套接字发出的整个对象并将其设置为 msg?我确实在网页上显示了用户名变量的定义位置,至少是重要的部分,当检查这些变量时,它们取了它们需要的值,所以这些不是问题。我怀疑您使用 msg.username 进行某些操作,所以我会仔细检查是否有任何调整可以解决问题。很快就会更新。
标签: javascript node.js sockets socket.io