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
循环中。JavaScript
var
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 });