因此,我跟踪了几个有关类似问题的问题,但是,这些问题及其适当的解决方案来自多年前,从那时起,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
我并没有完全死脑筋,所以很明显它在套接字发出它时没有收到用户名变量,但是我不知道为什么。任何帮助将不胜感激。
答案 0 :(得分:1)
在客户端中执行此操作时:
socket.emit('chatMessage', { message: $('#messageField').val(), username: userName, tag: userTag, userpiclink: userPicture});
这意味着当您在此处的服务器中收到它时:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
这意味着msg
将是您发送的整个对象。因此,如果要从该对象获取用户名,则需要参考:
msg.username
不只是
username
因此,您将更改为:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: msg.username, sendertag: msg.tag, postpiclink: msg.userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
仅供参考,多余的是发送整个msg
对象,然后又在同一条消息中再次发送三个单独的属性。实际上,您要两次发送这三个属性。