0

当我尝试运行我的 nodejs 应用程序时,我遇到了错误。我正在制作一个聊天应用程序。这是我的代码:

var users = {};
var sockets = {};
var connect = require('connect');
var io = require('socket.io');

var fs = require('fs');

var port = process.env.VCAP_APP_PORT || process.env['app.port'] || 3000;

var app = connect().use(connect.static('public')).listen(port);

var chat_room = io.listen(app);

chat_room.sockets.on('connection', function(socket) {

    socket.emit('entrance', {message: 'Welcome to the chat room!'});
    // Register your client with the server, providing your username
    socket.on('init', function(username) {
        users[username] = socket.id;    // Store a reference to your socket ID
        sockets[socket.id] = { username : username, socket : socket };  // Store a reference to your socket

    });

    socket.on('chat', function(data) {

        user = data.message.user;
        message = data.message.message;

        chat_room.sockets[users[user]].emit(
            'chat', 
            { 
                message : message,
                from : sockets[socket.id].username
            }
        );
    });
});

整个错误:

> TypeError: Cannot call method 'emit' of undefined
>     at Socket.<anonymous> (C:\Users\Niraj\Desktop\node\private-chat\app.js:35:40)
>     at Socket.EventEmitter.emit [as $emit] (events.js:96:17)
>     at SocketNamespace.handlePacket (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\namespace.js:335:22)
>     at Manager.onClientMessage (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\manager.js:487:38)
>     at WebSocket.Transport.onMessage (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\transport.js:387:20)
>     at Parser.<anonymous> (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:39:10)
>     at Parser.EventEmitter.emit (events.js:96:17)
>     at opcodeHandlers.1.finish (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:288:16)
>     at Parser.opcodeHandlers.1.expectData [as expectHandler] (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:299:15)
>     at Parser.add (C:\Users\Niraj\Desktop\node\private-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:466:24)

我只是nodejs的初学者,我的代码有问题吗?提前致谢

4

2 回答 2

0

您正在尝试向身份不明的套接字发送消息。

不知道您的应用程序的其余部分,但在:

user = data.message.user;

您不应该调用“data.message.username”而不是“data.message.user”吗?可能是不同的东西。

于 2013-04-01T15:14:47.820 回答
-1

而不是发射,做一个广播:

socket.broadcast.emit(msg)
于 2013-01-11T19:12:36.490 回答