Javascript 我在node.js中收到一条消息,对象套接字未定义
我有以下代码:Javascript 我在node.js中收到一条消息,对象套接字未定义,javascript,node.js,sockets,Javascript,Node.js,Sockets,我有以下代码: function Socket(io, playGame, mapper) { io.on('connection', function (socket) { // message handler for the chat message socket.on('sendChat', function (data) { console.log(socket); console.log(data)
function Socket(io, playGame, mapper) {
io.on('connection', function (socket) {
// message handler for the chat message
socket.on('sendChat', function (data) {
console.log(socket);
console.log(data);
console.log('recieved chat');
var connectedPlayer = playGame.findConnectedPlayer(socket);
if (!connectedPlayer)
return;
var connectedGame = playGame.findConnectedGame(socket, connectedPlayer.gameId);
if (!connectedGame)
return;
// send update game with players properly ordered
for (socketIndex in this.sockets) {
var socket = this.sockets[socketIndex];
// send the new data to each player
socket.socket.emit('chatUpdate', { chatText: data.chat });
}
});
// message handler for join game message
socket.on('joinGame', function (data) {
console.log('recieved join:', JSON.stringify(data));
if (!playGame.newConnectedPlayer(socket, data))
return;
在sendChat的方法中,套接字未定义。在joinGame的方法中,定义了套接字。我试过几种方法,但问题仍然存在。任何帮助都将不胜感激。您必须重命名2个
socket
变量中的一个——循环中'connection'
的参数或var
:
io.on('connection', function (socket) {
var
是参数,使得参数不可访问
发生这种情况的部分原因是var套接字
不仅仅存在于for
循环中。JavaScriptvar
s的作用域是函数
,它们的声明位于函数
的顶部,如下所示:
socket.on('sendChat', function (data) {
var connectedPlayer, connectedGame, socket; // each initially `undefined`
console.log(socket);
// ...
for (socketIndex in this.sockets) {
socket = this.sockets[socketIndex];
// ...
});
而且,具有相同的确切名称,从特定的函数
最多只能访问其中一个
还要注意的是,
for
循环和var套接字
实际上并不是必需的
您可以使用Socket.IO服务器
向所有客户端发送消息
io.emit('chatUpdate', { chatText: data.chat });
您确定存在
this.sockets
和this.sockets[socketIndex]
吗?
io.emit('chatUpdate', { chatText: data.chat });